Требуется помощь по запросу

0

Как выбрать результаты из таблицы T1, где

T1.itemID = T2.itemID

и никакой соответствующей записи, найденной в T2, то есть найденной только в T1?

Теги:

2 ответа

5
Лучший ответ

Вот так:

SELECT …
  FROM t1 LEFT JOIN t2 ON (t1.itemid = t2.itemid)
  WHERE t2.itemid IS NULL

Более очевидный запрос, использующий NOT EXISTS, запускает более медленные старые версии MySQL. Спасибо @OMG Ponies за тесты в новой (неуказанной) версии.

Вот версия NOT EXISTS:

SELECT …
  FROM t1
  WHERE NOT EXISTS (SELECT 1 FROM t2 WHERE t2.itemid = t1.itemid)

(Объяснение, чтобы ответить на комментарии: LEFT JOIN отличается от INNER JOIN тем, что, если в правой таблице нет строки, строка все равно возвращается в результатах, но со всеми столбцами = NULL.)

  • 0
    Будет ли это работать, если в T2 нет подходящей записи?
  • 0
    если t1.itemid = t2.itemid и t2.itemid IS NULL, то t1.itemid также не будет нулевым? Я не совсем понимаю :)
Показать ещё 2 комментария
1
select * from T1 where ItemID not in (select ItemId from T2)
  • 1
    С MySQL это, вероятно, самый медленный способ сделать это ... MySQL (по крайней мере, в прошлый раз, когда я проверял) фактически создаст результат этого подзапроса как временный. (На самом деле, из комментария @OMG Ponies видно, что они это исправили)
  • 0
    Да, я согласен. не существует, это путь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню