2015-08-22 4 views
1

У меня есть два запроса:Как внутреннее соединение отличается от обычного выбора нескольких таблиц?

SELECT m.id, m.name, f.type, c.id 
FROM main AS m, filter AS f, city AS c 
WHERE m.id = f.id AND c.name = m.city; 

и

SELECT m.id, m.name, f.type, c.id 
FROM main AS m 
INNER JOIN filter as f ON m.id = f.id 
INNER JOIN city AS c ON c.name = m.city; 

Оба должны дать мне тот же набор выходов. Я запускал их для небольшого набора значений, и он работал нормально, но когда я запускал их для очень большого набора значений, оба возвращали очень разное количество строк (первая возвращала ~ 500 тыс. Строк, а вторая возвращала ~ 65 тыс. Строк). Есть ли разница в этих двух запросах?

[Изменить]:

Я использую MySQL в качестве СУБД.

+0

Первый возвращает все результаты, второй возвращает общие поля, см. http://www.w3resource.com/mysql/advance-query-in-mysql/inner-join-with -multiple-tables.php – valicu2000

+6

# 2 является стандартным способом ** ANSI/ISO ** - это было предпочтительнее, поскольку стандарт SQL: 1992 (** более 20 лет! **). Вы обязательно должны перестать использовать стиль # 1 разделенных запятыми списков таблиц ... –

+2

@marc_s Даже если это правильный совет, это не объясняет, почему у него разные результаты. –

ответ

1

Даже если запрос №2 является рекомендуемым стандартом. Оба запроса должны возвращать одинаковый результат.

My sugestion. Сравните те присоединиться запрос отделенного

SELECT m.id, m.name, f.type 
FROM main AS m, filter AS f 
WHERE m.id = f.id; 

SELECT m.id, m.name, f.type 
FROM main AS m 
INNER JOIN filter as f ON m.id = f.id; 

А потом

SELECT m.id, m.name, c.id 
FROM main AS m, city AS c 
WHERE c.name = m.city; 

SELECT m.id, m.name, f.type, c.id 
FROM main AS m 
INNER JOIN city AS c ON c.name = m.city; 

И дайте нам знать, если есть какая-то разница. (не должно быть)

+0

Да, я пробовал, как вы сказали. Результаты соответствовали ожидаемому. Далее я исследовал и выяснил, что сценарий back end обновлял некоторые столбцы, из-за которых произошло это несоответствие. Спасибо за поддержку. Это фиксируется. –

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