#sql #sqlite #inner-join #unpivot #union-all
#sql #sqlite #внутреннее соединение #отменить #объединение-все
Вопрос:
Я пытаюсь получить имена столбцов из запроса. Имена столбцов в моем случае — это напряжения батареи, и не каждый идентификатор совместим с каждым напряжением батареи, поэтому у меня есть 2-я таблица, в которой отображаются идентификаторы, которые имеют какое напряжение. Если значение равно null, то оно не поддерживает это напряжение. Я хотел бы получить окончательный запрос напряжений для этого идентификатора. Итак, имена столбцов, в которых есть данные.
Я попробовал следующее в надежде, что оно вернет два столбца, names и notnull, чтобы затем я мог выполнить последний запрос по этому вопросу и отфильтровать нулевые данные и получить результирующее напряжение батареи. Но следующее ничего не вернуло и ошибок не было.
WITH previous_results AS(SELECT *
FROM Table1
JOIN Table2
ON Table1.table2id = Table2.table2id
), second_results AS( SELECT *
FROM previous_results
WHERE previous_results.id= '2'
)
SELECT c.name, c.[notnull] FROM pragma_table_info('second_results') c ;
Этот способ, вероятно, не сработает, так что может кто-нибудь помочь мне с решением? Я предоставил визуальный образ, чтобы вы могли увидеть, что я ищу в конце.
Ответ №1:
Похоже, вам нужны имена столбцов table2
, которые имеют ненулевые значения для данного id
. Если это так, вы можете использовать union all
:
select '12' as colname from table2 where tbl2_id = 2 and col_12 is not null
union all select '24' from table2 where tbl2_id = 2 and col_24 is not null
union all select '48' from table2 where tbl2_id = 2 and col_48 is not null
Я предположил, что имена столбцов col_12
col_24
и col_48
в table2
.
Если вы действительно хотите выполнить фильтрацию по id
from table1
, то вы можете join
и перенести фильтрацию на id
where
предложение внешнего запроса:
select t2.colname
from (
select tbl2_id, '12' as colname from table2 where col1_12 is not null
union all select tbl2_id, '24' from table2 where col1_24 is not null
union all select tbl2_id, '48' from table2 where col1_48 is not null
) t2
inner join table1 t1 on t1.tbl2_id = t2.tbl2_id
where t1.id = 2