select c.COM_ID,c.COM_CODE,c.COM_NAME,c.ORIGIN,c.SPECIFICATION,c.UNIT,ci.PRICE4,ci.NO_IN_PACKAGE,cc.QUANTITY from COMMODITY_INFO ci,COMMODITY c,INVENTORY cc where c.COM_ID=ci.COM_ID and ci.COM_ID=cc.COM_ID order by c.com_id 
从三个表里查询同一个产品的不同属性字段,这样写的sql查询出来的结果重复,只需要一条记录,但出来多条。我应该怎么写?

解决方案 »

  1.   

    加了 distinct 管用
      

  2.   

    显示有重复要可用distinct /group by 
      

  3.   

    select c.COM_ID,c.COM_CODE,distinct c.COM_NAME,c.ORIGIN,c.SPECIFICATION,
           c.UNIT,ci.PRICE4,ci.NO_IN_PACKAGE,cc.QUANTITY 
    from COMMODITY_INFO ci,COMMODITY  c,INVENTORY cc 
    where c.COM_ID=ci.COM_ID and ci.COM_ID=cc.COM_ID 
    order by c.com_id  
      

  4.   

    有一个字段不重复都不可过滤,可用max/min
      

  5.   


    看看是那一个字段不重复,用min/max(字段)
      

  6.   

    ;with f as
    (select c.COM_ID,c.COM_CODE,c.COM_NAME,c.ORIGIN,c.SPECIFICATION,c.UNIT,ci.PRICE4,ci.NO_IN_PACKAGE,cc.QUANTITY from COMMODITY_INFO ci,COMMODITY c,INVENTORY cc where c.COM_ID=ci.COM_ID and ci.COM_ID=cc.COM_ID   
    )select * from f t where SPECIFICATION=(select max(SPECIFICATION) from f where  COM_ID=t.COM_ID and  COM_ID=t.COM_ID)
      

  7.   


    这个位置加上报错:在关键字 'distinct' 附近有语法错误。
      

  8.   

    group by 这样用
    select name,MAX(ID) as ID
    from syscolumns
    group by Name--如果 1个 Name--> 多个 ID首先你要确定是那个表的字段重复,用条件取第一条或最后一条或min/max
      

  9.   

    这是查询结果,像com_id =43, com_id=44我只需要显示一条即可。
      

  10.   

    min(com_id)其它字段用group by 参照14楼,没用min字段加在 group by 
      

  11.   

    为什么用  min(com_id)? min(com_id) 是取不出最小值的,com_id是相等的,比如43,44两个重复的不是同一条记录,com_id不存在大小的,com_id=43这个重复了3条,com_id=44这个重复了5条,是两条不同数据,
      

  12.   

    distinct 是紧跟着 select 命令的,是对整个查询内容的全部列值去重.
    不能只对一个列去重,比如:
    1,'aaa',15,'qac',5
    2,'bbb',22,'qtd',5
    3,'ccc',34,'r5s',5
    如果你要对最后一列去重,那其他列的值取什么呢?