如何在MySQL中使用多个表从单列中选择多个值?

时间:2011-05-21 08:24:19

标签: mysql sql database

我有以下3个表

表1

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

表2

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 =(蓝色或橙色)AND(绿色或黑色)

以便输出

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')

任何建议都会非常感激!

更新 还有一个问题:)

如何选择每个table1.name其中table3.title =('green'和'orange'和'black'AND'...')

2 个答案:

答案 0 :(得分:2)

不确定这是否符合您的需要,但您可能想尝试一下:

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 :(得分:1)

如果我的问题是对的,你就近了:

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')