Это MySQL JOIN?

SELECT
     dim_date.date, dim_locations.city, fact_numbers.metric
FROM
     dim_date, fact_numbers
WHERE
     dim_date.id = fact_numbers.fk_dim_date_id
AND
     dim_locations.city = "Toronto"
AND
     dim_date.date = 2010-04-13;

Поскольку я не использую команду JOIN, мне интересно, действительно ли это JOIN (и если нет, как его назвать)?

Это, кстати, для размерной модели, которая использует суррогатные и первичные ключи для согласования деталей.


person Drewdavid    schedule 26.10.2013    source источник
comment
связанные: stackoverflow.com/a/11180050/1291428; ANSI JOIN и неявное объединение   -  person Sebas    schedule 26.10.2013
comment
Привет, спасибо, что поделились этой ссылкой; похоже, что рекомендуется использовать явные соединения, а не неявные   -  person Drewdavid    schedule 26.10.2013


Ответы (3)


Да, он объединяет таблицы, поэтому будет предоставлять соответствующую информацию из всех таблиц.

Одним из основных недостатков связывания таблиц через WHERE вместо JOIN является невозможность использовать LEFT, RIGHT и Full для отображения записей из одной таблицы, даже если они отсутствуют в другой.

Однако ваш оператор SQL недействителен. Вы не связываете dim_locations ни с одной из других таблиц, и это отсутствует в предложении FROM.

Ваш запрос с использованием INNER JOIN, который сопоставим с вашим предложением WHERE, может выглядеть примерно так:

SELECT DD.date, DL.city, FN.metric
FROM dim_date AS DD
  JOIN fact_numbers AS FN ON DD.id = FN.fk_dim_date_id
  JOIN dim_locations AS DL ON DL.id = FN.fk_dim_locations_id
WHERE DL.city = 'Toronto'
AND DD.date = 2010-04-13
person Linger    schedule 26.10.2013

да, это объединение столов. Это называется синтаксисом, отличным от ANSI JOIN, если предложение соединения не используется явно. И когда используется предложение соединения, это ANSI JOIN

person Kinjal    schedule 26.10.2013
comment
Просто любопытно, как произносится термин ANSI? Люди читают это как A N S I join или an-c? - person Peter Kirby; 03.05.2014
comment
второй то, что я произношу. И мой родной язык не английский. - person Kinjal; 03.05.2014

Если вы ссылаетесь на две разные таблицы в предложении where и сравниваете их ссылочные идентификаторы, тогда да, он действует так же, как JOIN.

Однако обратите внимание, что это может быть очень неэффективным, если оптимизатор не оптимизирует его должным образом. См .: Что-то не так с соединениями, которые не используют ключевое слово JOIN в SQL или MySQL? и INNER JOIN ключевые слова | с их использованием и без них

person Klazen108    schedule 26.10.2013