2013-03-25 4 views
0

Действительно борется здесь и не совсем понимает, что происходит. Использование MS SQL Server 2012.Объединяет несколько таблиц

Если я должен был запустить этот код:

USE database 1; 
GO 

SELECT a.ID, b.ID, c.ID, d.ID 
FROM table1 a, table2 b, table3 c, table3 d 
INNER JOIN database2.tablex tx ON a.ID = tx.ID 

Это не будет работать по какой-то причине. Intellisense будет отображать только последний псевдоним в списке, поэтому «d». Если я напишу оставшуюся часть кода, это будет означать, что столбец xxxx не может быть связан ... Как я могу это сделать? Я хочу выбрать из нескольких таблиц, а затем применить внутренние объединения для всех таблиц (построение DW).

Благодаря

+0

Хочет декартово соединение между table1, table2, Table3 и table4, или вы опустили части запроса? –

ответ

4

Не следует смешивать 2 типа соединяет - старый (условие соединения в WHERE) и новый (который использует JOIN ключевое слово). Ваш запрос не работает, потому что только последняя таблица в FROM видна JOIN:

--Doesn't work 
SELECT a.ID, b.ID, c.ID, d.ID 
FROM table1 a, table2 b, table3 c, table3 d 
INNER JOIN database2.tablex tx ON a.ID = tx.ID 

--Works (note - table1 a is the last in "FROM"): 
SELECT a.ID, b.ID, c.ID, d.ID 
FROM table2 b, table3 c, table3 d, table1 a 
INNER JOIN database2.tablex tx ON a.ID = tx.ID ; 

-- Preferred way : 
SELECT a.ID, b.ID, c.ID, d.ID 
FROM table1 a 
INNER JOIN table2 b ON (...) 
INNER JOIN table3 c ON (...) 
INNER JOIN table3 d ON (...) 
INNER JOIN database2.tablex tx ON a.ID = tx.ID