Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何连接两列不同的mySQL select语句?_Mysql - Fatal编程技术网

如何连接两列不同的mySQL select语句?

如何连接两列不同的mySQL select语句?,mysql,Mysql,如何组合以下两个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; 这些语句中的每一个都单独工作,并返回相同数量的行。我只想在同一个表的两列中得到这两个结果。在这样一个语句中使用它 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;

这些语句中的每一个都单独工作,并返回相同数量的行。我只想在同一个表的两列中得到这两个结果。

在这样一个语句中使用它

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)

您可以使用此解决方案:

SELECT
    a.property AS p1, b.property AS p2
FROM
(
    SELECT a.property, @rn1:=@rn1+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:=@rn2+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
的每列中的属性放在同一行上)。

很有趣,但这不起作用。。。它返回的行比预期的多很多。。。还有其他想法吗?谢谢你的第二个解决方案。不幸的是,它没有像第一个那样工作:它只返回p1=p2的行。