Mysql 加入相关问题
SQL新手 假设我们有两张桌子 其中一个具有ID和Name列:Mysql 加入相关问题,mysql,sql,ssms,Mysql,Sql,Ssms,SQL新手 假设我们有两张桌子 其中一个具有ID和Name列: +----+-------+ | ID | Name | +----+-------+ | 1 | Sam | | 1 | Dan | +----+-------+ 第二个也有两列,如下所示: +----+------------+ | ID | Relatives | +----+------------+ | 1 | Uncle | | 2 | Aunty | +----+-------
+----+-------+
| 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 |
+------+-------+
GoogleOUTER-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记录。我从来都不想要同样的