我有一个包含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;
person1id | person2id | name1name2 | |
---|---|---|---|
p1_1 | p2_1 | 名称1 | 名称3 |
p1_2 | p2_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