Как выбрать несколько значений из одного столбца с несколькими таблицами в MySQL? - PullRequest
0 голосов
/ 21 мая 2011

У меня есть следующие 3 таблицы

table1

id    name
----------
1     john
2     dave
3     eve

table2

table1_id    table3_id
----------------------
   1            2            
   1            3
   1            5
   2            2
   2            3
   2            4
   3            1
   3            5

Таблица3

id    title
------------
1     blue
2     orange
3     green
4     yellow
5     black

Я пытаюсь выбрать каждое имя table1.name, где table3.title = (синий ИЛИ оранжевый) И (зеленый ИЛИ черный)

так что вывод

name
----
john
dave

Это мой запрос, который пока не выполнит эту работу:

SELECT table1.name 
FROM table1 
JOIN table2 ON table1.id = table2.table1_id
JOIN table3 t1 ON table2.table3_id = t1.id
JOIN table3 t2 ON t1.title = t2.title
WHERE t1.title IN ('blue', 'orange')
AND t2.title IN ('green', 'black')

Любые предложения будут очень признательны!

UPDATE Еще один вопрос:)

Как выбрать каждое имя table1.name, где table3.title = («зеленый», «оранжевый», «черный», «...»)

Ответы [ 2 ]

2 голосов
/ 21 мая 2011

Не уверен, соответствует ли это вашим потребностям, но вы можете попробовать это:

SELECT DISTINCT table1.name, table3.title
FROM table2
LEFT JOIN (table1, table3)
ON (table2.table1_id = table1.id AND table2.table3_id = table3.id)
WHERE table3.title = 'orange' OR table3.title = 'blue';

Возможно, вы захотите избавиться от DISTINCT, который прямо сейчас гарантирует, что каждое имя будет показано только один раз.

у.е. Роман

1 голос
/ 21 мая 2011

Если я правильно понял ваш вопрос, вы близки:

SELECT table1.name
FROM table1 
JOIN table2 t1_link ON table1.id = t1_link.table1_id
JOIN table3 t1_data ON t1_link.table3_id = t1_data.id AND t1_data.title in ('blue', 'orange')
JOIN table2 t2_link ON table1.id = t2_link.table1_id
JOIN table3 t2_data ON t2_link.table3_id = t2_data.id AND t2_data.title in ('green', 'black')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...