如何以下列方式联合Access SQL中的两个表:
表A
UserID Name Option
A John O1
B Doe O2
表B
UserID Option
A O3
B O4
当前输出:
UserID Name Option
A John O1
A - O3
B Doe O2
B - O4
期望的输出:
UserID Name Option
A John O1
A John O3
B Doe O2
B Doe O4
当前查询(常规联盟):
SELECT UserID, Name, Option
FROM TableA
UNION ALL
SELECT UserID, Null As Name, Option
FROM TableB
而不是Null As Name,我想基于UserID接管TableA的名称。使用这样的子选择不起作用:
SELECT UserID, Name, Option
FROM TableA
UNION ALL
SELECT UserID, (Select TOP 1 Name FROM TableA WHERE TableA.UserID = UserID) As Name, Option
FROM TableB
上面的查询无法正常工作,可能是因为它不知道要引用哪个UserID。
是否可以获得所需的输出?它决不能通过结合来实现。
我正在考虑通过VBA而不是SQL查询逐行进行。
答案 0 :(得分:0)
如果Userid在TableA中没有重复项,只需执行left join
:
SELECT UserID, Name, Option
FROM TableA
UNION ALL
SELECT tb.UserID, ta.Name, tb.Option
FROM TableB tb
LEFT JOIN TableA ta ON tb.UserID = ta.UserID
答案 1 :(得分:0)
我认为它应该有用
SELECT UserID, Name, Option
FROM TableA
UNION ALL
SELECT TableB.UserID, Name, TableB.Option
FROM TableB LEFT JOIN TableA
ON TableB.UserID=TableA.UserID
答案 2 :(得分:0)
其他两个选项都很好,但我想指出这一点:
如果您符合UserID
值,则可以使用您尝试过的子查询来执行此操作:
SELECT UserID, Name, Option
FROM TableA
UNION ALL
SELECT UserID,
(Select TOP 1 Name
FROM TableA
WHERE TableA.UserID = TableB.UserID) As Name,
Option
FROM TableB
虽然我重新格式化了这一点,但我唯一改变的是将TableA.userID = UserID
转为TableA.UserID = TableB.UserID
。这 - 子查询引用子查询外部的表 - 称为相关子查询,BTW。
答案 3 :(得分:0)
您需要(内部)加入TableA
才能获得Name
SELECT A.UserID, A.Name, A.Option
FROM TableA A
UNION
SELECT A.UserID, A.Name, B.Option
FROM TableA A
INNER JOIN TableB B
ON A.UserID = B.UserID;