我有一张数据表,结构如下。
己知条件是attr_id=151或153,attr_value='4L'或‘SM’,所以写如下SQL语句。
SELECT * FROM 表名 FROM WHERE attr_id IN(151,153) AND attr_value IN('4L','SM')
查询结果:
这不是我想要的,我想只查出如下结果,该怎么写呢?

解决方案 »

  1.   

    你为什么要取id是54和52的 而不是另外的 必须还需要一个条件,是否是取ID大的?
      

  2.   

    我要的这两条数据goods_id都是1035,这不是一种巧合,都是有原因的。要在是attr_id值要等于151或153的所有记录中查找,attr_value的值要等于4L和SM。这也就是说goods_id等于1035这条数据,必须是attr_value又等于4L,又等于SM。
      

  3.   

    我是WEB程序员,不是专业DBA,这个问题给我难爆了。
      

  4.   

    如果你的需求是在goods_id 是1035里面去选择SELECT * FROM 表名 FROM WHERE attr_id IN(151,153) AND attr_value IN('4L','SM') AND goods_id = 1035 
      

  5.   

    select * from tb  a 
    where ID=(select max(goods_attr_id)from tb  where Name=a.Name) order by  goods_attr_id;
      

  6.   


    我说的简单一些。就是取出attr_value值同时是SM和4L的数据。之所以是goods_id是1035,那是因为它的attr_value值那即是4L也是SM。 
      

  7.   

    取出attr_value值是SM和4L的数据,上图中goods_id是1035的满足条件,也就是第1和第2条。而下面的两条不满足条件,因为它们attr_value的值要不就满足4L,要不只满足SM。写SQL语句时的己知条件就只知道attr_value。
    我写的SQL如下,但不好用。
    SELECT * FROM table WHERE attr_value='4L' OR attr_value='SM'
      

  8.   

    SELECT * FROM 表名 t
    WHERE attr_id =153 and attr_value='4L'
    and exists (select 1 from 表名 where attr_id =151 and attr_value='SM' and goods_id =t.goods_id )