SQL - 重复 - 查询形式一个表

时间:2014-09-07 13:09:17

标签: sql

我遇到查询问题,这只是其中的一部分,但我选择不重复值时遇到问题。

TABLE par 
ProdID     ParID    Value
23462       5         1
23462       6         4
237         5         2
237         6         1
178         2         1

执行此查询时:

SELECT 
 par.ProdID
FROM
  par
WHERE
  ((par.ParID= 6 AND par.Value < 99) OR 
  (par.ParID= 5 AND par.Value < 99)) AND 
  par.ProdID = 23462

我得到了这个结果:

ProdID
23462
23462

当我将OR改为AND时,我不会得到任何结果。 如何更改查询只会显示1个结果? 它只是查询的一部分,我不能使用DISTINCT或LIMIT。

谢谢。

4 个答案:

答案 0 :(得分:0)

你有两个23462的结果满足你给出的条件,因此返回两行。你可以试试这个:

SELECT 
 min(par.ProdID)
FROM
  par
WHERE
  ((par.ParID= 6 AND par.Value < 99) OR 
  (par.ParID= 5 AND par.Value < 99)) AND 
  par.ProdID = 23462

答案 1 :(得分:0)

你可以group by ProdID

select
    par.ProdID
from
    par
where
  ((par.ParID= 6 AND par.Value < 99) OR 
  (par.ParID= 5 AND par.Value < 99)) AND 
  par.ProdID = 23462
group by 
    ProdID

示例: http://sqlfiddle.com/#!6/75998/3

答案 2 :(得分:0)

你可以使用Distinct在结果集中只获取一次重复值。但是你应该小心,因为Distinct比编写一个有效的查询慢一点它没有使用{{{ 1}}:

所以你可以写:

Distinct

答案 3 :(得分:0)

尝试这个......

WITH CTE_RESULT AS 
(
    SELECT ROW_NUMBER() OVER ( PARTITION BY ProdID ORDER BY PRODID) ROW_NO, ProdID, ParID, Value
    FROM
    #par A
    WHERE
    A.ParID IN (5,6) AND A.Value < 99   
 )
 SELECT * FROM CTE_RESULT C WHERE C.ROW_NO =1  --AND C.ProdID=23462