我遇到查询问题,这只是其中的一部分,但我选择不重复值时遇到问题。
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。
谢谢。
答案 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
答案 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