2017-02-07 3 views
-2

У меня есть таблица со связанными данными через несколько строк, которые мне нужно запросить как одну строку, если значение meta_key находится в ('A', 'B', 'C').SQL выбрать несколько строк в одну строку

meta_id | post_id | meta_key | meta_value 
--------+---------+----------+----------- 
    1 | 1234 | A  | Foo 
    2 | 1234 | B  | Bar 
    3 | 1234 | C  | Baz 
    4 | 1234 | D  | junk 

Я ищу, чтобы в конечном итоге является запрос, который дает мне результаты

Выходной

A | B | C 
----+-----+---- 
Foo | Bar | Baz 

ответ

1

Вы можете использовать условную агрегацию, чтобы получить такой результат. Это предполагает, что для данного post_id есть одно meta_value для meta_key.

select 
max(case when meta_key='A' then meta_value end) as A, 
max(case when meta_key='B' then meta_value end) as B, 
max(case when meta_key='C' then meta_value end) as C 
from yourtable 
group by post_id 
-2

Вы можете просто запустить этот SQL условную команду запроса:

SELECT * FROM table_name WHERE meta_key = 'A' и meta_key = 'B' и meta_key = 'C'

Чтобы ограничить результаты запроса, сделать:

SELECT * FROM table_name WHERE meta_key = 'А' и meta_key = 'В' И meta_key = ПРЕДЕЛ 'C' 10

Примечание: L Ключевое слово IMIT принимает любой допустимый диапазон целых чисел.

+0

Запись в таблице не может иметь значения «A» и «B» и «C» в поле meta_key в тот же момент, но только один из них. –

Смежные вопросы