Как вывести из таблицы только строки, которых нет в другой таблице?
Как вывести из таблицы t1 строки, которых нет в таблице t2 ? Можно ли это сделать без подзапросов?
Отслеживать
51.6k 201 201 золотой знак 65 65 серебряных знаков 246 246 бронзовых знаков
задан 20 ноя 2020 в 8:12
1 1 1 золотой знак 1 1 серебряный знак 1 1 бронзовый знак
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Вот как звучит вопрос — вывести из таблицы t1 строки, которых нет в таблице t2, так и пишите (только по английски):
select t1.* from t1 where not exists ( select 1 from t2 where t2.id = t1.id)
Доп. вопрос: Можно ли это сделать без подзапросов?. Можно, но вряд ли нужно, т.к. скорее никаких преимуществ это не даст:
select t1.* from t1 left join t2 on t2.id = t1.id where t2.id is null
Выбрать значения, которых нет в другой таблице

но результатов не выводится. Видимо он выполняет сначала первое условие и убирает сразу все строки.
Пример в первой таблице m=1 и r=2
Во второй таблице m=1 и r=1
то он должен вывести все строки из первой таблицы,
а вот если в первой таблице m=1 и r=2
Во второй таблице m=1 и r=2
то он ничего выводить не должен.
Немогу разобраться как это реализовать сравнение сразу по всем столбцам таблицы.
Как проверить наличие записи в таблице sql
Это делается с помощью EXISTS() , аргументом которой является подзапрос. Если подзапрос возвращает хотя бы одну строку, то EXISTS() вернёт true , а если ни одной, то false .
EXISTS(SELECT id FROM users WHERE id = 1)
Как найти только те записи, ID у которых нет в другой таблице в БД?
Всем привет! Нужно достать записи с таблицы orders, id у которых нет в таблице applications(столбик order_id).
В таблице applications в столбике order_id хранятся id записей с таблицы orders.
Пробовал так, но так он сравнивает только 1 запись в таблице applications, а другие нет.
$get_orders = mysqli_query($db, "SELECT * FROM `orders` WHERE `city` = '$_SESSION[city]' AND `id` NOT IN (SELECT `id` FROM `applications` WHERE `driver` = '$_SESSION[id]' AND `order_id` = `orders`.`id`)");
Пробовал использовать INNER JOIN, но так все записи с orders повторяются столько раз, сколько есть записей в таблице applications.
- Вопрос задан более трёх лет назад
- 178 просмотров