Mysql 加入相关问题

Mysql 加入相关问题,mysql,sql,ssms,Mysql,Sql,Ssms,SQL新手 假设我们有两张桌子 其中一个具有ID和Name列: +----+-------+ | ID | Name | +----+-------+ | 1 | Sam | | 1 | Dan | +----+-------+ 第二个也有两列,如下所示: +----+------------+ | ID | Relatives | +----+------------+ | 1 | Uncle | | 2 | Aunty | +----+-------

SQL新手

假设我们有两张桌子

其中一个具有ID和Name列:

+----+-------+
| ID |  Name |
+----+-------+
|  1 | Sam   |
|  1 | Dan   |
+----+-------+
第二个也有两列,如下所示:

+----+------------+
| ID |  Relatives |
+----+------------+
|  1 | Uncle      |
|  2 | Aunty      |
+----+------------+
如果我们进行内部联接,我们将只得到满足条件的行。但我希望输出像这样

+------+------------+
|  ID  |  Relatives |
+------+------------+
| 1    | Uncle      |
| NULL | Aunty      |
+------+------------+
曾经,只应显示ID列中的值。如果出现两次或三次,则应为空

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

尝试以下方法:

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
+------+-------+
|  id  | name  |
+------+-------+
| 1    | Uncle |
| NULL | Aunty |
+------+-------+
希望,这就是你在问题中提出的问题。

试试这个:

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
+------+-------+
|  id  | name  |
+------+-------+
| 1    | Uncle |
| NULL | Aunty |
+------+-------+

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

由于您的问题不清楚,因此假设您需要从表
a
和表
b
中检索
id
,并且您还希望避免重复行,那么一个选项可以是使用
distinct
以及
左连接

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

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

由于您的问题不清楚,因此假设您需要从表
a
中检索
id
,从表
b
中检索
name
,并且您还希望避免重复行,那么一个选项可以是使用
distinct
左联接

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

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


Google
OUTER-JOIN
我试过了,但输出结果并不像我预期的那样。。。请试一试。。如果这样做了,那么请共享为什么sam和dan的id相同,以及这两个表的链接是什么?如果您尝试了:显示您尝试了什么,您得到的输出和所需的输出从表A中选择*作为完整的外部联接表B作为A.id=B.id上的B这将给出所有记录的组合。在每个重复项上获取null for id列的表单看起来不太可能日志
外部连接
我尝试过,但输出并不像我预期的那样。。。请试一试。。如果这样做了,那么请共享为什么sam和dan的id相同,以及这两个表的链接是什么?如果您尝试了:显示您尝试了什么,您得到的输出和所需的输出从表A中选择*作为完整的外部联接表B作为A.id=B.id上的B这将给出所有记录的组合。在每个重复项上获取null for id列的表单看起来不可能如预期的那样。。。它只返回一条记录否,它应该返回两行,因为我确实离开了joinNo,但是group by将这两条记录棒化到一个创建表a(id int,name varchar(10))创建表b(id int,name varchar(10))插入值(1,'sam')插入值(1,'Dan'))插入到b值中(1,'Dan')插入到b值中(2,'Dan')完全是…:)不符合预期。。。它只返回一条记录否,它应该返回两行,因为我确实离开了joinNo,但是group by将这两条记录棒化到一个创建表a(id int,name varchar(10))创建表b(id int,name varchar(10))插入值(1,'sam')插入值(1,'Dan'))插入b值(1,'Dan')插入b值(2,'Dan')是的,正是…:)我想要的是不同的。U使用distinct禁止相同的id记录。我从不想要相同的,我想要的是不同的。U使用distinct禁止相同的id记录。我从来都不想要同样的