2016-08-29 1 views
0

Я пытаюсь создать вложенные утверждения соединения и использовать псевдоним для программирования. Позвольте мне дать вам список таблиц, к которым я пытаюсь присоединиться, и их внешние ключи.Действительно ли это вопрос? (Повторение псевдонимов)

TABLE1: id (Foreign key) 
TABLE2: id (primary key), idx (foreign key) 
TABLE3: id (primary key), idx (primary key) 
TABLE4: id (primary key), idx (primary key)` 

SELECT * 
FROM (((TABLE1 JOIN 
     TABLE2 
     ON TABLE1.id = TABLE2.id 
     ) AS NEW_TABLE JOIN 
     TABLE3 
     ON NEW_TABLE.id = TABLE3.id AND NEW_TABLE.idx = TABLE3.idx 
    ) AS NEW_TABLE JOIN 
     TABLE4 
     ON NEW_TABLE.id = TABLE4.id AND 
     NEW_TABLE.idx = TABLE4.idx 
    ); 

Можете ли вы сообщить мне, является ли это допустимым запросом и использует псевдонимы таким образом?

+2

Есть ли у вас определенную СУБД вы используете? – Zi0n1

+0

Да, SQL Server – sethu

ответ

0

вам, вероятно, нужен гнездовые полные запросы:

SELECT * FROM 
    (SELECT * FROM 
    (SELECT * FROM TABLE1 JOIN TABLE2 ON TABLE1.id = TABLE2.id) A 
    JOIN TABLE3 ON A.id = TABLE3.id AND A.idx = TABLE3.idx) B 
    JOIN TABLE4 ON B.id = TABLE4.id AND B.idx = TABLE4.idx; 

Несмотря на то, не зная содержимое таблиц, трудно сказать, какой результат вы можете получить, или даже действует ваш запрос.

1

Я так не считаю. Я хотел бы написать это как:

SELECT * 
FROM TABLE1 JOIN 
    TABLE2 
    ON TABLE1.id = TABLE2.id JOIN 
    TABLE3 
    ON TABLE1.id = TABLE3.id AND TABLE2.idx = TABLE3.idx 
    TABLE4 
    ON TABLE1.id = TABLE4.id AND 
     TABLE2.idx = TABLE4.idx; 

(. Ну, на самом деле, я хотел бы использовать псевдонимы таблиц, но это идея)

Скобки ничего не делают для вас. Я также думаю, что повторное использование псевдонима NEW_TABLE, скорее всего, приведет к ошибке.

0

Формат, как показано ниже ..

SELECT * FROM 
    TABLE1 
    JOIN TABLE2 ON TABLE1.id = TABLE2.id 
    JOIN TABLE3 ON Table1.id = TABLE3.id 
     AND Table2.idx = TABLE3.idx 
    JOIN TABLE4 ON Table3.id = TABLE4.id 
     AND Table3.idx = TABLE4.idx 
Смежные вопросы