我有两张桌子如下。如何选择具有值' 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的行。
谢谢你的时间。
答案 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'