您可以使用此解決方案:
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
的同一行上)。
有趣,但這沒有奏效......它返回了比預期更多的行......任何其他的想法? – Zaka 2012-07-23 09:39:30