您可以使用此解决方案:
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