Sql найти записи которых нет в другой таблице
Перейти к содержимому

Sql найти записи которых нет в другой таблице

  • автор:

Как вывести из таблицы только строки, которых нет в другой таблице?

Как вывести из таблицы 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 

Выбрать значения, которых нет в другой таблице

Author24 — интернет-сервис помощи студентам

но результатов не выводится. Видимо он выполняет сначала первое условие и убирает сразу все строки.

Пример в первой таблице 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 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *