我有两个表:
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来获取列名,但我对此并不熟悉。)
答案 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)
您可以在下方尝试使用UNION
和JOIN
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);