Mysql: сортировка с не в

#mysql

#mysql

Вопрос:

У меня есть следующий запрос:

 SELECT deals.* FROM `deals` as deals 
JOIN cities_deals as cd on cd.deal_id=deals.id and cd.city_id='1'
  

Который выберет все сделки, а затем сгруппирует их по городу, в котором они находятся. Теперь я хочу получить список всех сделок, которых вообще нет в cities_deals.

Ответ №1:

Вы можете использовать NOT IN :

 SELECT *
FROM deals
WHERE id NOT IN (SELECT deal_id FROM cities_deals)
  

Альтернативный способ ее записи — использовать ЛЕВОЕ СОЕДИНЕНИЕ:

 SELECT d.*
FROM deals AS d
LEFT JOIN cities_deals AS cd
ON cd.deal_id = d.id
WHERE cd.deal_id IS NULL