(SQL)从两个以上的表中选择并返回所有具有公共字段的表,其中所有表中都存在特定值

时间:2017-07-27 09:52:38

标签: c# sql .net ms-access

如上所述,我希望结果是每个表中满足值的所有列的一行。所有表中的公共字段是主键。任何类型的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)

5 个答案:

答案 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
相关问题