我有以下三个表,我试图联合在一起,并创建一个所有桌面和任何人有一个分配给他们的用户名(如果有的话)的概述。我应该用什么样的JOIN加入这些表格?
dbo.Users
ID Name Lastname JobTitle
118 Ryan Doe Field Engineer
119 Jessica Braun Technical Consultant
120 Daniel Sous Web developer
121 Amy Amyson Intern
.. etc
dbo.LightDesktops
ID Model MACAddress UserID
1 HP1234 AA:AA:AA:AA:AA:AA 118
2 HP1234 BB:BB:BB:BB:BB:BB 121
3 HP1234 AA:BB:BB:AA:BB:AA NULL
4 HP1234 BB:AA:BB:AA:AA:BB 124
dbo.MediumDesktops
ID Model MACAddress UserID
1 HP12PRO AA:AB:AA:BB:AA:BA 132
2 HP12PRO BB:BA:AB:BA:BB:AA 119
3 HP12PRO AA:BA:BA:AB:AA:BA 123
4 HP12PRO BB:BB:BB:AB:BA:BB 241
我设法弄清楚如何做到这一点每个类型的桌面,例如LightDesktops:
SELECT * FROM LightDesktops LEFT OUTER JOIN Users ON LightDesktops.UserID = Users.UserID
,会告诉我他们的资料对台式机的一个很好的概述,以及谁如果有的话有一个。
如果我想有一点用都没有,因此在股票我可以做
SELECT * FROM LightDesktops LEFT OUTER JOIN Users ON LightDesktops.UserID = Users.UserID WHERE LightDesktops.UserID IS NULL
我怎样才能达到同样的效果光桌面的概述,但包含的信息的两个表我们的桌面?我试图使用一个UNION,但返回了很多重复值。
稍微偏离主题;你有没有考虑将轻型和中型桌面合并成一张桌子?您可以添加一个额外的列来识别哪些是轻/中等。这种方法的好处是它会简化你需要编写的查询。 –
你可以添加一个你希望在输出中看到哪些列的例子吗? –
采取@目的地数据的建议可能是合理的,但也可能无法进行此更改。或者,您可以使用'CREATE VIEW'在一个地方获取连接逻辑,然后在所有后续查询中使用该视图,稍后您可以重构以删除该视图。 –