Выбрать ID соответствующие двум условиям - MySQL

Узнай цену своей работы

Формулировка задачи:

| ID | meta_name | meta_value ------------------------------------- |1| name1 | 48 | |1| name2 | 6 | |1| name3 | 7 | |2| name1 | 48 | |2| name2 | 6 | |2| name3 | 12 | |3| name1 | 48 | |3| name2 | 19 | |3| name3 | 7 | Как выбрать id, у которых (meta_name=name1 and meta_value=48) and (meta_name=name2 and meta_value=6)? Т.е. в результате должно быть выбрано 1 и 2

Решение задачи: «Выбрать ID соответствующие двум условиям»

textual
Листинг программы
SELECT q1.id FROM
  (SELECT Id FROM tbl  WHERE meta_name='name1' AND meta_value=48) q1
  JOIN  (SELECT Id FROM tbl  WHERE meta_name='name2' AND meta_value=6) q2
ON  q1.Id = q2.Id

Объяснение кода листинга программы

В данном коде выполняется запрос к таблице tbl с условием, что нужно выбрать все строки, где значение поля meta_name равно 'name1' и значение поля meta_value равно 48. Затем происходит соединение (JOIN) с другой таблицей, где значение поля meta_name равно 'name2' и значение поля meta_value равно 6, и выбираются только те строки, где значения полей Id совпадают. В результате получается список ID, которые соответствуют обоим условиям.

  1. SELECT q1.id FROM
  2. (SELECT Id FROM tbl WHERE meta_name='name1' AND meta_value=48) q1
  3. JOIN
  4. (SELECT Id FROM tbl WHERE meta_name='name2' AND meta_value=6) q2
  5. ON q1.Id = q2.Id Получается следующий запрос: SELECT q1.id FROM (SELECT Id FROM tbl WHERE meta_name='name1' AND meta_value=48) q1 JOIN (SELECT Id FROM tbl WHERE meta_name='name2' AND meta_value=6) q2 ON q1.Id = q2.Id Таким образом, в результате выполнения этого запроса будет получен список ID, которые соответствуют обоим условиям.

Оцени полезность:

9   голосов , оценка 4 из 5
Похожие ответы