从外键表中选择记录,其中一个项匹配多个条件

时间:2015-04-28 19:32:42

标签: mysql

我有两张桌子如下。如何选择具有值' orange'和'蓝色'在同一时间。

+----+----------+
| ID |SECOND_ID |
+----+----------+
| 10 |    1     |
| 20 |    2     |
| 30 |    3     |
+----+----------+

+-----------+----------+
| SECOND_ID |   COLOR  |
+-----------+----------+
| 1         |  blue    |
| 1         |  orange  |
| 2         |  blue    |
| 2         |  orange  |
| 3         |  orange  |
+-----------+----------+ 

修改

好吧我承认我没有很好地解释这个问题。首先让我们为第一个表调用表 items ,然后像Alex那样调用 items_color 表。 这些表具有一对多关系,其中 SECOND_ID 每次都有多个值。现在我希望选择同时具有蓝色和橙色的行,它应该是ID = 1和2的行。 谢谢你的时间。

2 个答案:

答案 0 :(得分:2)

http://sqlfiddle.com/#!9/05254/1

SELECT *, 
  SUM(IF(items_colors.color='blue',1,0)) as blue,
  SUM(IF(items_colors.color='orange',1,0)) as orange
FROM items
LEFT JOIN items_colors
ON items.second_id = items_colors.second_id
GROUP BY items.id
HAVING blue>0 and orange>0

答案 1 :(得分:1)

有许多方法,最简单的方法是使用子查询:

       SELECT'second_id' FROM 'table' WHERE 'color' = 'blue' AND 'second_id' = 
      (SELECT 'second_id' FROM 'table' WHERE 'color' = 'orange')

但我认为这不是最优化的方式

此外,您可以尝试使用INNER JOIN(它将像交叉点一样工作)

SELECT * FROM items_colors as A INNER JOIN items_colors AS B ON
   A.SECOND_ID = B.SECOND_ID AND A.color = 'blue' AND B.color = 'orange'