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

Владислав Сироштан

Нужно вывести информацию с db_order, если нету ни одного повторения значения с db_order.id в таблице db_ips.order_id.

Сами таблицы:

db_ips

db_order

Спасибо.

3 ответа

Владислав Сироштан

Если я правильно понял ваш вопрос, то как то так:

SELECT db_order.*
FROM db_order LEFT OUTER JOIN db_ips ON db_order.id = db_ips.order_id
WHERE db_ips.order_id IS NULL;


Владислав Сироштан

1й способ:

SELECT db_order.* FROM db_order LEFT JOIN db_ips ON db_order.id = db_ips.order_id WHERE db_ips.order_id IS NULL

2й способ:

SELECT * FROM db_order WHERE NOT EXISTS(select 1 from db_ips where db_order.id = db_ips.order_id)

3й способ:

SELECT * FROM db_order WHERE id NOT IN (SELECT order_id FROM db_ips)

Скорость выполнения этих запросов может отличаться. Однозначного ответа, какой из них будет быстрее, конкретно на ваших данных, сказать сложно. Это зависит от количества записей в таблицах и количества совпадающих/отсутствующих значений.


Владислав Сироштан

Можно поступить следующим образом

SELECT *
FROM db_order
WHERE id NOT IN (SELECT DISTINCT order_id FROM db_ips)

licensed under cc by-sa 3.0 with attribution.