mysql where语句

时间:2012-01-12 17:29:12

标签: mysql

category    item
red         pen
red         ball
blue        kite
blue        toy
shiny       pen

我希望得到所有红色或蓝色的物品,并且它们必须闪亮。

到目前为止,这是我的查询

SELECT DISTINCT item FROM mytable WHERE category IN ("red","blue")

这可以获取所有红色和蓝色项目,但是如何指定该项目也必须是闪亮的?在IN语句中添加闪亮仍然会返回所有蓝色项目。应排除蓝色项目,因为它们都没有数据库中的闪亮条目。

以我的例子为例,只应返回笔。非常感谢任何帮助。

4 个答案:

答案 0 :(得分:1)

这应该有效:

select item from mytable where category = "red" or item = "blue"
intersect
select item from mytable where category = "shiny";

第一个选择制作一组所有红色或蓝色元素,第二个选择制作一组所有闪亮元素。由于你只想保留两组中的那些,你只需要在两组之间建立交集。

http://sql.1keydata.com/fr/sql-intersect.php

答案 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)

你需要自己加入表,但要记住,当表大小增加时,自联接非常慢。你应该考虑规范你的桌子。