带有联接操作的SQL嵌套查询

  • 本文关键字:SQL 嵌套 查询 操作 sql
  • 更新时间 :
  • 英文 :


我有一个包含person1id和person2id列的表p,以及一个包含每个人的personId和他们的姓名列的表J。我想要一个查询来生成一个由person1id、person2id、name1、name2列组成的表。在结果中,name1是person1id的名称,name2是person2id的名称。是否可以通过嵌套查询实现这一点?

下面的表格看起来像

表p

person1id person2id
p1_1 p2_1
p1_2 p2_2

您可以尝试将join与条件聚合函数一起使用,CASE WHEN条件取决于您所期望的新列逻辑。

查询#1

SELECT person1id,   
person2id,
MAX(CASE WHEN personId IN ('p1_1','p1_2') THEN name END) name1,
MAX(CASE WHEN personId IN ('p2_1','p2_2') THEN name END) name2
FROM P
INNER JOIN J ON personId IN (P.person1id,P.person2id)
GROUP BY person1id, 
person2id;
name1
person1idperson2idname2
p1_1p2_1名称1名称3
p1_2p2_2名称2名称4

计算出一个没有联接的查询。

SELECT person1id,   
person2id,
(SELECT name FROM J WHERE personId = person1id) AS name1,
(SELECT name FROM J WHERE personId = person2id) AS name2
FROM P

另一个左加入。

SELECT person1id,   
person2id,
j1.name as name1,
j2.name as name2
FROM P
LEFT JOIN J j1 ON person1id = j1.personId
LEFT JOIN J j2 ON person2id = j2.personId

最新更新