2012-07-23 58 views
1

如何將以下兩個mySQL select語句組合起來,以便我可以在不同列中使用同一個表中的每個語句?如何連接兩列不同的mySQL select語句?

select a.property as p1 from T1 a inner join T2 b on a.id = b.id1; 

select a.property as p2 from T1 a inner join T2 b on a.id = b.id2; 

這些語句中的每一個都單獨工作,並將返回相同數量的行。我只想在同一張表中的兩列中得到兩個結果。

回答

2

使用它在單個語句這樣

select 
    case when a.id=b.id1 then a.property end as p1, 
    case when a.id=b.id2 then a.property end as p2 
from 
    T1 a inner join T2 b on a.id in (b.id1,b.id2) 
+0

有趣,但這沒有奏效......它返回了比預期更多的行......任何其他的想法? – Zaka 2012-07-23 09:39:30

0

您可以使用此解決方案:

SELECT 
    a.property AS p1, b.property AS p2 
FROM 
(
    SELECT a.property, @rn1:[email protected]+1 AS rn 
    FROM T1 a 
    INNER JOIN T2 b ON a.id = b.id1 
    CROSS JOIN (SELECT @rn1:=0) var_init 
) a 
INNER JOIN 
(
    SELECT a.property, @rn2:[email protected]+1 AS rn 
    FROM T1 a 
    INNER JOIN T2 b ON a.id = b.id2 
    CROSS JOIN (SELECT @rn2:=0) var_init 
) b ON a.rn = b.rn 

編輯:下面是這應該是簡單的Madhivanan的解決方案的變化:

SELECT MAX(CASE WHEN a.id=b.id1 THEN a.property END) AS p1, 
     MAX(CASE WHEN a.id=b.id2 THEN a.property END) AS p2 
FROM  T1 a 
JOIN  T2 b ON a.id IN (b.id1,b.id2) 
GROUP BY a.id 

我們添加了GROUP BY和MAX,以便我們不會每id獲得兩行,而且我們只選擇case表達式的最大值,它爲每個組獲取非空值(實質上是將每個列中的屬性在每個id的同一行上)。

+0

這工作,謝謝! – Zaka 2012-07-23 09:44:36

+0

我只是想知道這是否是最簡單的解決方案...? – Zaka 2012-07-23 10:13:38

+0

@扎卡看到我的編輯。檢查第二個解決方案是否也可以工作 – 2012-07-23 10:22:32