Выбрать 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, которые соответствуют обоим условиям.
- 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 Получается следующий запрос: 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, которые соответствуют обоим условиям.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д