如上所述,我希望结果是每个表中满足值的所有列的一行。所有表中的公共字段是主键。任何类型的UNION都不起作用,因为每个表中的列数不相同。我使用的是Access数据库,因此不支持FULL OUTER JOINS。我在C#,Visual Studio中的应用程序中使用此查询,由于某种原因无法在不给它语法错误的情况下进行内连接。理想情况下,我希望在一个查询中完成此操作。
例如,假设我有表格:
表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 :(得分:0)
左连接应该在ms-access中起作用:
select *
from Table1 t1
left join Table2 t2
on t1.userID = t2.userID
left join Table3 t3
on t1.userID = t3.userID
答案 1 :(得分:0)
这应该适用于Acces:
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
答案 2 :(得分: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.
答案 3 :(得分: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;
答案 4 :(得分:0)
我认为你在condition.you没有指定表的问题。
所以改变。
Where userId=1
要
Where b.userId=1