2011-05-21 103 views
0

我有以下3个表如何从MySQL的单个列中选择多个表中的多个值?

table1的

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

任何建议将非常感激!

UPDATE 一个问题:)

如何选择每个table1.name其中table3.title =( '绿', '橙' 和 '黑' 和 '...')

回答

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

太棒了!这解决了我的问题100%。感谢名单! – fl0w 2011-05-21 09:12:09

+0

还有一个问题..当我想要选择每个table1.name时,查询将如何显示table3.title =('green'AND'blue'AND'black'AND'...')Thanx提前! – fl0w 2011-05-21 09:30:22

+1

根据需要替换in子句。如果两个条件相互关联,您也可以将它们放在where子句中。 – 2011-05-21 11:11:11

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的。

铜 罗马

+0

thanx您的建议!它几乎解决了我的查询,但我仍然想知道如何选择每个table1.name,其中table3.title =('blue'或'orange')** AND('green'或'black')** Thanx提前! – fl0w 2011-05-21 09:00:30