加入相关问题

时间:2017-12-18 09:35:39

标签: mysql sql ssms

SQL新手

假设我们有两个表

其中一个有ID和Name列:

+----+-------+
| ID |  Name |
+----+-------+
|  1 | Sam   |
|  1 | Dan   |
+----+-------+

第二个也有两列如下:

+----+------------+
| ID |  Relatives |
+----+------------+
|  1 | Uncle      |
|  2 | Aunty      |
+----+------------+

如果我们进行内连接,我们只会获得condtion满足的行。但我希望输出像是

+------+------------+
|  ID  |  Relatives |
+------+------------+
| 1    | Uncle      |
| NULL | Aunty      |
+------+------------+

只应显示ID列中的值。如果出现次数是两次或三次,则应该为空。

告诉mw是否有可能?以及两种情况如何。

2 个答案:

答案 0 :(得分:2)

试试这个:

SELECT
  T1.Id,
  T2.Relatives
FROM SecondTable T2
LEFT JOIN FirstTable T1
  ON T1.ID = T2.ID
GROUP BY T1.Id,
         T2.Relatives

这就是我得到的:

CREATE TABLE #a (
  id int,
  name varchar(10)
)
CREATE TABLE #b (
  id int,
  name varchar(10)
)
INSERT INTO #a
  VALUES (1, 'sam')
INSERT INTO #a
  VALUES (1, 'Dan')
INSERT INTO #b
  VALUES (1, 'Uncle')
INSERT INTO #b
  VALUES (2, 'Aunty')

SELECT
  T1.Id,
  T2.name
FROM #b T2
LEFT JOIN #a T1
  ON T1.ID = T2.ID
GROUP BY T1.Id,
         T2.name

DROP TABLE #a
DROP TABLE #b

<强>输出:

Id      name
NULL    Aunty
1       Uncle

希望,这是你在问题中提出的问题。

答案 1 :(得分:2)

由于您的问题不明确,因此假设您需要从表id中检索a并从表name中检索b,并且您还希望避免重复的行,然后一个选项可以是使用distinctleft join

select distinct a.id, b.name
from b
left outer join a
on b.id = a.id
order by id desc

<强>结果:

+------+-------+
|  id  | name  |
+------+-------+
| 1    | Uncle |
| NULL | Aunty |
+------+-------+

<强> DEMO