Я могу сделать это в sybase, и я могу сделать это в Oracle, но я не вижу, как это сделать в mysql.
У меня есть это: (пожалуйста, воздержитесь от повторного форматирования моего sql, в прошлый раз, когда кто-то это сделал, они изменили его, поэтому он не был таким же и сделал вопрос бессмысленным)
select table1.id
from
table1
inner join
table2 on (table1.id = table2.id and table2.data='cat'),
table1 t1
left outer join
table3 on (t1.id = table3.id and table3.data = 'dog')
И я получаю всевозможные бессмысленные результаты.
Я хочу получить список всех идентификаторов из таблицы 1, где table2.data = cat, а затем выполнить внешнее соединение с результатами этого против таблицы 3, где table3.data = dog.
Я заметил, что я не могу указать одну и ту же таблицу / псевдоним для table1 в двух предложениях соединения, поэтому это наводит меня на мысль, что mysql запускает выражения соединения отдельно и объединяет результаты вместе или что-то в этом роде.
Я также попытался избавиться от "внутреннего соединения" в разделе from и поместить его в предложение where, это тоже не сработало, хотя и не сработало по-другому (были разные ошибочные результаты)
Это было бы так просто в sybase или oracle.
Что я делаю неправильно?






select table1.id
from
table1
inner join
table2 on (table1.id = table2.id and table2.data='cat')
left outer join
table3 on (table1.id = table3.id and table3.data = 'dog')
Я думаю, вы никогда не захотите использовать запятую в операторе from. Я считаю, что запятая эквивалентна перекрестному соединению. Не уверен, но я думаю, что этот запрос - то, что вы ищете.
Правильно, вы не хотите смешивать синтаксис запятой (SQL-89) и синтаксис JOIN (SQL-92) в одном запросе. Хотя синтаксический анализатор позволяет это, это может вызвать запутанные взаимодействия, потому что запятая имеет более низкий приоритет, чем JOIN.
Интересный способ взглянуть на это, но да, я полагаю, что запятая эквивалентна перекрестному соединению, которое, как сказал Билл, затем не пересекается соответствующими условиями соединения в предложении WHERE. Форма запятой предшествует нотации JOIN с большим отрывом. (И хорошо заметный, Шон!)
Используя синтаксис запятой, обычно вы можете предотвратить перекрестное соединение, задав условия в предложении WHERE.