Mysql 在两个表中组合多个列
这是我的桌子: T1记录: T2参考人员:Mysql 在两个表中组合多个列,mysql,sql,postgresql,Mysql,Sql,Postgresql,这是我的桌子: T1记录: T2参考人员: id name 1 Peter 2 John 3 Mary 当我选择T1 id=1时,我希望得到以下结果: id referencePerson1 referencePerson2 referencePerson3 1 Peter John
id name
1 Peter
2 John
3 Mary
当我选择T1 id=1时,我希望得到以下结果:
id referencePerson1 referencePerson2 referencePerson3
1 Peter John Mary
我该怎么做?
谢谢您只需三次加入即可:
SELECT t1.id, t21.name, t22.name, t23.name
FROM T1
INNER JOIN T2 t21 ON t21.id = T1.referencePerson1ID
INNER JOIN T2 t22 ON t22.id = T1.referencePerson2ID
INNER JOIN T2 t23 ON t23.id = T1.referencePerson3ID
WHERE T1.id = 1
这是一种基本的做事方式:
SELECT T1.id, P1.name, P2.name, p3.name
FROM record T1 LEFT JOIN referencePerson P1
ON T1.referencePerson1ID=P1.id
LEFT JOIN referencePerson P2
ON T1.referencePerson2ID=P2.id
LEFT JOIN referencePerson P3
ON T1.referencePerson3ID=P3.id
当人数未知时,另一种方法是使用PIVOT注意,如果任何referencePersonNID列包含NULL或referencePerson表中没有匹配的值,则此查询将不会返回该行。(这可能是期望的行为。也可能在所有三列上都没有NULL和(强制的)外键约束。)是的,我知道这一点,所以在写答案时,对我来说是50对50的决定。无论如何,您的评论让OP更清楚地决定是使用内部联接,还是使用左联接:)此查询非常整洁。但是@har07有一个问题,用户想要referencePerson1 referencePerson2 referencePerson3
,其中作为此查询返回的列为“name”。不管怎样,用户接受意味着他可能会得逞。谢谢,祝你好运。
SELECT T1.id, P1.name, P2.name, p3.name
FROM record T1 LEFT JOIN referencePerson P1
ON T1.referencePerson1ID=P1.id
LEFT JOIN referencePerson P2
ON T1.referencePerson2ID=P2.id
LEFT JOIN referencePerson P3
ON T1.referencePerson3ID=P3.id