2013-10-13 7 views
0

Вот эти два SQL-запросов:SQL - разница между WHERE с двумя таблицами и РЕГИСТРИРУЙТЕСЬ

SELECT `o`.`date`, `i`.`description`, `o`.`quantity` 
FROM `orders` AS `o`, `items` AS `i` 
WHERE `i`.`itemID` = `o`.`itemID`; 

и

SELECT `o`.`date`, `i`.`description`, `o`.`quantity` 
FROM `orders` AS `o` 
JOIN `items` AS `i` 
ON `i`.`itemID` = `o`.`itemID`; 

я получаю один результат меньше с первым. Может кто-нибудь объяснить разницу между ними?

+1

Возможный дубликат http://stackoverflow.com/questions/44917/explicit-vs-implicit-sql-join – Vucko

+1

Эти запросы функционально идентичны. Не могли бы вы предоставить некоторые примеры данных или скрипт, чтобы воспроизвести проблему? – geomagas

+2

Они функционально эквивалентны. Я никогда не испытывал ситуации, когда одни и те же результаты не возвращаются. FYI: Первый стиль часто называют «тета». Второй - это стиль ANSI – AgRizzo

ответ

0

Они функционально эквивалентны, поскольку MySQL оптимизатор переписывает тета объединятся в ANSI JOIN (по крайней мере MySQL 5.6 делает)

Вы можете проверить это с помощью EXPLAIN EXTENDED your_query; ПОКАЖИТЕ ПРЕДУПРЕЖДЕНИЯ;

стиль тета присоединиться

SELECT `o`.`date`, `i`.`description`, `o`.`quantity` 
FROM `orders` AS `o`, `items` AS `i` 
WHERE `i`.`itemID` = `o`.`itemID`; 

ANSI JOIN

SELECT `o`.`date`, `i`.`description`, `o`.`quantity` 
FROM `orders` AS `o` 
JOIN `items` AS `i` 
ON `i`.`itemID` = `o`.`itemID`; 

Единственным отличием является читаемость стиль тета облегчает MIS, что это INNER JOIN, так что привычка отключить его, чтобы написать ANSI JOIN

Смежные вопросы