Вот SQL-запрос, который найдет все записи в таблице msg, где order_id существует, но отсутствует в таблице orders:
SELECT msg.order_id FROM msg LEFT JOIN orders ON msg.order_id = orders.id WHERE msg.order_id IS NOT NULL AND orders.id IS NULL;
<?php
// Подключение к базе данных SQLite3
$db = new SQLite3('database.db');
// Выполнение запроса
$query = "SELECT msg.order_id
FROM msg
LEFT JOIN orders ON msg.order_id = orders.id
WHERE msg.order_id IS NOT NULL
AND orders.id IS NULL";
$result = $db->query($query);
// Сбор всех несоответствий
$mismatches = [];
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
$mismatches[] = $row['order_id'];
}
// Вывод результатов
if (empty($mismatches)) {
echo "Все order_id в таблице msg существуют в таблице orders.";
} else {
echo "Найдены несоответствующие order_id:\n";
print_r($mismatches);
}
// Закрытие соединения
$db->close();
?>Если предпочитаете использовать подзапрос вместо JOIN:
SELECT order_id FROM msg WHERE order_id IS NOT NULL AND order_id NOT IN (SELECT id FROM orders);
Этот запрос также найдет все order_id из таблицы msg, которых нет в таблице orders.