我的SQL数据库中有2个表。我们称之为表A和表B. 我在ID = AID上使用左连接加入了两个表。表A具有按名称ID的字段,表B具有字段AID和价格。 问题是表B可以为表A中的ID提供多个价格。
要求是 - 如果表B中只有一个价格对应于表A中的ID,那么它应该返回该价格。 如果表B中有多个价格表中的ID,那么我应该将价格设为零/空。
查询 -
SELECT DISTINCT A.ID,B.Price
from A
left join B
on A.ID = B.AID
where "some condition"
答案 0 :(得分:1)
使用Count()
和Over()
窗口函数查找每个ID
的记录数,然后根据计数返回price
试试这种方式
SELECT DISTINCT A.ID,
case when count(1) over(partition by A.ID) > 1 then NULL else B.Price end
from A
left join B
on A.ID = B.AID
Mysql
SELECT DISTINCT a.id,
CASE
WHEN c.aid IS NULL THEN NULL
ELSE b.price
END
FROM a
LEFT JOIN b
ON a.id = b.aid
LEFT JOIN (SELECT aid
FROM b
GROUP BY aid
HAVING Count(1) = 1) c
ON a.id = c.aid
答案 1 :(得分:1)
对于 SQL Server (也适用于 MySQL )。一个子查询(您可以放入CTE)只显示只有一个价格的AID
:
SELECT A.ID,
B.Price
FROM A
LEFT JOIN (
SELECT AID
FROM B
GROUP BY AID
HAVING COUNT(Price) = 1
) as C
ON C.AID = A.ID
LEFT JOIN B
ON C.AID = B.AID
答案 2 :(得分:0)