2017-07-27 44 views
0

如上所述,我希望結果是每個表中所有列的一行,價值得到滿足。所有表格中的通用字段是主鍵。任何類型的UNION都不起作用,因爲每個表中的列數不相同。我正在使用Access數據庫,因此不支持FULL OUTER JOINS。我在C#,Visual Studio中的應用程序中使用這個查詢,出於某種原因,如果沒有它給我一個語法錯誤,也不能進行內部連接。理想情況下,我希望在一個查詢中完成此操作。(SQL)從多於兩個表中選擇並返回所有表,其中有一個公共字段,其中所有表中都存在特定值

例如可以說我有表:

表1

userID name age 
1  Bob 24 
2  John 19 

表2

userID col1 col2 col3 
1  fd sd gh 
... 

表3

userID col4 col5 col6 col7 
1  ff hg fd et 
... 

我想要的結果:

userID name age col1 col2 col3 col4 col5 col6 col7 1 Bob 24 fd sd gh ff hg fd et

也許最接近我有:

SELECT * FROM table1 AS b 
INNER JOIN table2 AS c ON c.userID = b.userID 
INNER JOIN table3 AS m ON m.userID = b.userID 
WHERE userID = 1; 

的錯誤我得到:

類型 'System.Data.OleDb.OleDbException' 的未處理的異常出現在system.data.dll

附加信息:在查詢 表達式語法錯誤(缺少運算符)「c.userID = b.userID INNER JOIN table3 AS m ON m.userID = b.UserI'。

我要補充一點,我希望查詢能適應(比方說,我不知道列,但我知道它有用戶ID)

+0

能否請您發佈你寫的查詢,您收到請錯誤? – VDK

+0

使用'內部連接' – ARr0w

+0

我在嘗試,看到我上面的嘗試 – ghostcoder

回答

0

所以最後我很接近。

在MS-Access中,加入多於2個表格時,必須使用括號(圍繞第一個連接?)。其次,在我的where條件下,我沒有爲userID指定一個表。看到我下面修改後的查詢:

SELECT * FROM table1 AS b 
(INNER JOIN table2 AS c ON c.userID = b.userID) 
INNER JOIN table3 AS m ON m.userID = b.userID 
WHERE b.userID = 1; 
0

左聯接應在工作MS-訪問:

select * 
from Table1 t1 
left join Table2 t2 
    on t1.userID = t2.userID 
left join Table3 t3 
    on t1.userID = t3.userID 
0

這應該在艾策斯工作:

Select T1.userID, T1.name, T1.age, T2.col1, T2.col2, T2.col3, T3.col4, T3.col5, T3.col6, T3.col7 from Table1 T1 
left join Table2 T2 on T2.userID=T1.userID 
left join Table3 T3 on T3.userID=T1.userID 

或者,如果你只希望出現在第一表中使用的內部記錄加入:

Select T1.userID, T1.name, T1.age, T2.col1, T2.col2, T2.col3, T3.col4, T3.col5, T3.col6, T3.col7 from Table1 T1 
    inner join Table2 T2 on T2.userID=T1.userID 
    inner join Table3 T3 on T3.userID=T1.userID 
0
Select 
t1.userID 
,t1.name 
,tb1.age 
,tb2.col1 
,tb2.col2 
,tb2.col3 
,tb3.col4 
,tb3.col5 
,tb3.col6 
,tb3.col7 
FROM table1 tb1 
INNER JOIN table2 tb2 ON tb1.userID=tb2.userID 
INNER JOIN table3 tb3 ON tb1.userID=tb3.userID 
WHERE --some conditions if u desire. 
+0

我真的在處理更多的表格,這些表格將來會有輕微的變化。所以一個硬編碼的解決方案不會很不幸,因爲我希望它是適應性的 – ghostcoder

+0

如果你不想要選擇特定的列表,只是做一個全選然後,如果你想要從第一個表來的信息來自你申報,做一個內連接,否則爲左連接,以防您想要加入的表中的信息。 所以,我會替換我向你展示的查詢:SELECT * from table1;並替換左連接的內部連接 – RGarcia

+0

您的建議返回了與上面相同的錯誤,謝謝 – ghostcoder

0

我認爲你的問題在哪裏condition.you沒有指定表。

所以改變。

Where userId=1 

Where b.userId=1 
相關問題