从多个列中选择,但检索列名

时间:2019-02-20 06:34:47

标签: mysql sql select

我有两个表:

tbl.device
ID  SERIAL CD   
--------------
1   123    51974
2   222    8733
3   888    321233

tbl.space
ID  SPACE1  SPACE2  SPACE3
------------------------------
1   -1      -1      555
2   -1      888     -611
3   222     -1      -1

现在我想从tbl.device获得结果(名称为SPACE a.k.a列名,但是如果设备不在空间中,则省略设备):

id  serial  cd      spaceitisin
2   222     8733    SPACE1  
3   888     321233  SPACE2

对此,最佳选择查询是什么? (我想我将需要在mysql查询中使用IF THEN来获取​​列名,但我对此并不熟悉。)

3 个答案:

答案 0 :(得分:2)

您可以join表并使用case表达式来查看您联接的列:

SELECT d.*,
       CASE d.serial 
            WHEN s.space1 THEN 'space1'
            WHEN s.space2 THEN 'space2'
            WHEN s.space3 THEN 'space3'
       END
FROM   device d
JOIN   space s ON d.serial IN (s.space1, s.space2, s.space3)

答案 1 :(得分:2)

您可以在下方尝试使用UNIONJOIN

select b.id,serial,cd, spaceitisin from
(
select space1 as spaceid,'space1' spaceitisin from tbl.space
union 
select space2,'space2' spaceitisin from tbl.space
union 
select space3,'space3' spaceitisin from tbl.space
)a inner join tbl.device b on a.spaceid=b.serial

答案 2 :(得分:1)

在MySQL中,您可以执行以下操作:

select d.*,
       field(d.serial, s.space1, s.space2, s.space3) as which
from device d join
     space s
     on d.serial in (s.space1, s.space2, s.space3);

这会将列作为“数字”返回-我怀疑这就是您想要的。

如果要任意字符串。您可以使用elt()

select d.*,
       elt(field(d.serial, s.space1, s.space2, s.space3), 'SPACE1', 'SPACE2', 'SPACE3') as which
from device d join
     space s
     on d.serial in (s.space1, s.space2, s.space3);