【问题标题】:Join related Issue加入相关问题
【发布时间】:2018-05-31 14:54:54
【问题描述】:

SQL 新手

假设我们有两个表

有一个 ID 和 Name 列:

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

第二个也有两列如下:

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

如果我们进行内部连接,我们只会得到满足条件的行。但我希望输出像

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

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

告诉我这是否可能?以及如何处理这两种情况。

【问题讨论】:

  • 谷歌OUTER JOIN
  • 我试过了,但输出不是我预期的……请尝试一下..如果完成了,请分享
  • 为什么 sam 和 dan 的 id 相同,以及链接 2 个表的原因是什么?
  • 如果您尝试过:显示您尝试过的内容、获得的输出和想要的输出
  • select * from table A as a full external Join table B as b on a.id = b.id 这将给出记录的所有组合。在那里形成每次重复的 id 列的空值看起来不可能

标签: mysql sql ssms


【解决方案1】:

由于您的问题不清楚,因此假设您需要从表 a 中检索 id 和表 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

【讨论】:

  • 我想要的是不同的。 U 使用 distinct 抑制了相同的 id 记录。我从来不想要同样的
【解决方案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

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

【讨论】:

  • 不如预期......它只返回一条记录
  • 不,它应该返回两行,因为我做左连接
  • 不,但是 group by 将两条记录合并为一个
  • 创建表 a(id int,name varchar(10)) 创建表 b(id int,name varchar(10)) 插入值 (1,'sam') 插入值 ( 1,'Dan') 插入 b 值 (1,'Dan') 插入 b 值 (2,'Dan')
  • 是的,正是...:)
猜你喜欢
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
  • 2021-06-25
  • 2012-07-23
  • 1970-01-01
  • 2011-07-31
  • 2013-01-09
  • 2012-02-02
相关资源
最近更新 更多