category item
red pen
red ball
blue kite
blue toy
shiny pen
我希望得到所有红色或蓝色的物品,并且它们必须闪亮。
到目前为止,这是我的查询
SELECT DISTINCT item FROM mytable WHERE category IN ("red","blue")
这可以获取所有红色和蓝色项目,但是如何指定该项目也必须是闪亮的?在IN语句中添加闪亮仍然会返回所有蓝色项目。应排除蓝色项目,因为它们都没有数据库中的闪亮条目。
以我的例子为例,只应返回笔。非常感谢任何帮助。
答案 0 :(得分:1)
这应该有效:
select item from mytable where category = "red" or item = "blue"
intersect
select item from mytable where category = "shiny";
第一个选择制作一组所有红色或蓝色元素,第二个选择制作一组所有闪亮元素。由于你只想保留两组中的那些,你只需要在两组之间建立交集。
答案 1 :(得分:1)
你必须自己加入桌子。
SELECT DISTINCT mytable1.item FROM mytable mytable1
INNER JOIN mytable mytable2 ON mytable1.item=mytable2.item
WHERE mytable1.category IN ("red","blue") AND mytable2.category="shiny"
答案 2 :(得分:1)
select
mt.item
from
MyTable mt
group by
mt.item
having
sum( if( mt.category = "shiny", 1, 0 ) ) = 1
and sum( if( mt.category in ( "red", "blue" ), 1, 0 )) > 0
答案 3 :(得分:0)
你需要自己加入表,但要记住,当表大小增加时,自联接非常慢。你应该考虑规范你的桌子。