2013-03-04 5 views
-2

У меня есть таблица:MySQL: Выбор записей с условиями, относится к нескольким строкам

ДЕТАЛЬ

-------------------------------------------------------- 
ID | PARENT_ID | DATA_KEY  | DATA_VALUE 
======================================================== 
1  |  1   |  Guitar  |  4 
-------------------------------------------------------- 
2  |  1   |  Radio  |  2 
-------------------------------------------------------- 
3  |  1   |  Tv   |  2 
-------------------------------------------------------- 
4  |  1   |  Drum Kit |  3 
-------------------------------------------------------- 
5  |  2   |  Guitar  |  4 
-------------------------------------------------------- 
6  |  2   |  Radio  |  2 
-------------------------------------------------------- 
7  |  2   |  Tv   |  2 
-------------------------------------------------------- 
8  |  2   |  Drum Kit |  3 
-------------------------------------------------------- 
9  |  3   |  Guitar  |  1 
-------------------------------------------------------- 
10 |  3   |  Radio  |  2 
-------------------------------------------------------- 
11 |  3   |  Tv   |  2 
-------------------------------------------------------- 
12 |  3   |  Drum Kit |  3 
-------------------------------------------------------- 

Как выбрать в MySQL отчетливого PARENT_ID, которая удовлетворяет приведенные ниже условия:

    1. DATA_KEY = 'Guitar' и DATA_VALUE = '4'
    1. DATA_KEY = 'Радио' и DATA_VALUE = '2'

Ожидаемые результаты запроса должны быть

------------- 
PARENT_ID 
============= 
    1 
------------- 
    2 
------------- 

Поскольку только PARENT_ID 1 и 2, имеет 'Гитара' = '4' и 'Радио' = '2'

+0

Я попытался SELECT DISTINCT PARENT_ID ИЗ ДЕТАЛЕЙ WHERE (DATA_KEY = 'Гитара' И DATA_VALUE = '4') AND (DATA_KEY = 'Радио' И DATA_VALUE = '2'), но он возвращает мне пустые данные. – Macchiato

+1

используйте OR вместо AND (один из скобок) – Sebastjan

+0

Я ответил с запросом, который получит то, что вы ищете. Однако я не понимаю ПОЧЕМУ, это полезно для вас. Честно говоря, вся настройка данных выглядит сомнительной для меня - я предполагаю, что больше знаний о схеме таблицы требуется для понимания использования. – Jeff

ответ

4
SELECT DISTINCT a.parent_id 
FROM details AS a 
JOIN details AS b ON a.parent_id=b.parent_id 
WHERE a.data_key='Guitar' AND a.data_value='4' AND 
     b.data_key='Radio' AND b.data_value='2'; 
+0

Спасибо за ответ, но этот запрос также вернет пустые строки, потому что условия «a.data_key =« Guitar »AND a.data_value = '4' AND b.data_key = 'Radio' AND a.data_value = '2' "фактически выполняется в одной строке, которая всегда будет возвращать false, потому что одна строка не может иметь a.data_key = 'Guitar' и a.data_key = 'Radio' – Macchiato

+0

Я думаю, что вы просто набрали неверно, я изменил a.data_value = '2' to b.data_value = '2', и он возвращает правильный результат. спасибо! – Macchiato

+0

это не возвращает результат –

0
SELECT DISTINCT Parent_Id 
FROM details 
WHERE (data_key='Guitar' AND data_value='4') OR 
(data_key='Radio' AND data_value='2') 

Это даст результаты, которые вы запросили.

То, что вы прокомментировали как пытающееся, было близко, но вместо «OR» использовалось «AND».

+0

Это неправильно, вы использовали OR, который вернет PARENT_ID 1,2 и 3. Условие состоит в том, чтобы удовлетворить data_key = 'Guitar' и data_value'4 'AND data_key'Radio' и data_value = '2' – Macchiato

+0

@Macchiato: Но ваш второй Критерии: «data_key =« Radio »и data_value =« 2 ». В вашем наборе образцов это ТАКЖЕ соответствует строке 10. Ничего, я вижу, где моя проблема. Вы ищете родителя Id, который удовлетворяет обоим критериям, а не parentIds, которые удовлетворяют любым критериям. – Jeff

0

может быть, вы посмотрите на этот

SELECT a.parent_id 
    FROM details AS a 
    JOIN details AS b ON a.parent_id=b.parent_id 
    WHERE a.data_key='Guitar' AND a.data_value='4' AND 
    b.data_key='Radio' AND b.data_value='2' 
    group by a.parent_id ; 

demo here

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