выбрать из нескольких столбцов, но получить имя столбца - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть две таблицы:

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 или именем столбца, но если устройство не в пространстве, тогда ommitустройство):

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

Какой запрос на выбор лучше всего подходит для этого?(Я думаю, что мне нужно будет использовать IF THEN в запросе mysql, чтобы получить имя столбца, но я не знаю, как это сделать).

Ответы [ 3 ]

0 голосов
/ 20 февраля 2019

Вы можете попробовать ниже, используя 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
0 голосов
/ 20 февраля 2019

В 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);
0 голосов
/ 20 февраля 2019

Вы можете 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...