【发布时间】:2017-12-31 16:15:23
【问题描述】:
我想加入三个表,
我有三个表用户、职业和教育,其中“uid”是用户表的主键和其他两个表的外键。我想加入这些表以在一个表中产生结果
user profession education
+------+-------+ +-----+----------+ +-----+---------+
| uid | uName | | uid | profName | | uid | eduName |
+------+-------+ +-----+----------+ +-----+---------+
| 1 | aaa | | 1 | prof1 | | 1 | edu1 |
| 2 | bbb | | 1 | prof2 | | 1 | edu2 |
| 3 | ccc | | 2 | prof1 | | 1 | edu3 |
| | | | 3 | prof3 | | 3 | edu4 |
| | | | 3 | prof2 | | | |
+------+-------+ +-----+----------+ +-----+---------+
Expected output
+------+-------+-----+----------+-----+---------+
| uid | uName | uid | profName | uid | eduName |
+------+-------+-----+----------+-----+---------+
| 1 | aaa | 1 | prof1 | 1 | edu1 |
| null | null | 1 | prof2 | 1 | edu2 |
| null | null |null | null | 1 | edu3 |
| 2 | bbb | 2 | prof1 | null| null |
| 3 | ccc | 3 | prof3 | 3 | edu4 |
| null | null | 3 | prof2 | null| null |
+------+-------+-----+----------+-----+---------+
我尝试了以下查询
select u.uid ,u.uName,p.uid , p.profName,e.uid,e.eduName
from user u inner join profession p on u.uid=p.pid
inner join education e on u.uid = e.uid
where u.uid=p.uid
and u.uid=e.uid
and i.uid=1
这给了我重复的值
+------+-------+-----+----------+-----+---------+
| uid | uName | uid | profName | uid | eduName |
+------+-------+-----+----------+-----+---------+
| 1 | aaa | 1 | prof1 | 1 | edu1 |
| 1 | aaa | 1 | prof2 | 1 | edu1 |
| 1 | aaa | 1 | prof1 | 1 | edu2 |
| 1 | aaa | 1 | prof2 | 1 | edu2 |
| 1 | aaa | 1 | prof1 | 1 | edu3 |
| 1 | aaa | 1 | prof2 | 1 | edu3 |
+------+-------+-----+----------+-----+---------+
有没有办法在不重复值的情况下获得输出。 谢谢
【问题讨论】:
-
您想要重复值。 SQL 结果集没有固有的顺序。您想要的格式最好在应用层完成。
-
查看你的结果,你没有重复的行..你有重复值的列..所以如果你需要不同的结果格式,你必须为演示文稿工作客户端
-
您的空值逻辑不清楚。如果 prof1 和 prof2 的 uid 相同,那么为什么 prof1 有 aaa 而 prof2 有 null?这两行结果差异的逻辑是什么?
-
由于您的表有重复的值,查询无法达到您的预期结果。请在您的代码上尝试。
标签: sql sql-server