2014-05-09 4 views
0

Я видел некоторый код, который делает это ...Sql Multiple Регистрация Синтаксис

select * 
from A 
left join B 
left Join C 
on C.column1 = B.column3 
on B.column2 = A.column4 
and C.column5 > 0 
and B.column6 < 0 

это эквивалентно

select * 
from A 
left join B 

on B.column2 = A.column4 
and B.column6 < 0 

left Join C 
on C.column1 = B.column 
and C.column5 > 0 

Почему бы кто-нибудь сделать, что первый фрагмент кода? возможно, это опечатка?

+0

Первый отправленный код выглядит недействительным. Тривиально (игнорируя семантическую структуру) [имеется только одно предложение ON (или 'join_condition'), разрешенное для JOIN] (http://dev.mysql.com/doc/refman/5.7/en/join.html). – user2864740

ответ

3

MySQL имеет более слабый синтаксис для объединений, чем стандарт ANSI. Фактически, есть целый раздел documentation, посвященный именно этой теме.

Первый запрос - действительно приемлемый синтаксис, как показано в этом SQL Fiddle. Этот запрос (тот же запрос, различные форматирования):

select * 
from A left join 
    B left Join 
    C 
    on C.column1 = B.column3 
    on B.column2 = A.column4 and C.column5 > 0 and B.column6 < 0 

интерпретируется как если бы скобки:

select * 
from A left join 
    (B left Join 
     C 
     on C.column1 = B.column3 
    ) 
    on B.column2 = A.column4 and C.column5 > 0 and B.column6 < 0; 

Вы можете, возможно, убедить себя в этом, меняя on положения. Этот запрос:

select * 
from A left join 
    B left Join 
    C 
    on B.column2 = A.column4 and C.column5 > 0 and B.column6 < 0 
    on C.column1 = B.column3; 

производит ошибки. Ссылка на таблицу A не известна для первого предложения on, поскольку это соединение находится между B и C.

Я не уверен, почему кто-то это сделает. Может быть, скобки были отброшены на какой-то стадии «очистки». Это могло бы быть просто, что при написании запроса этот синтаксис имел смысл, и человек никогда не замечал, насколько неудобен запрос (в примечании: У меняникогда ничего подобного не делал;). Это может быть намеренное обфускация.

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