繁体   English   中英

如何检查子查询结果中是否存在ID?

[英]How to check if an ID exists in the result of a sub-query?

假设我有以下查询来列出人们拥有的房屋的平均值:

SELECT PERSON.NAME, AVG
FROM PERSON, (
  SELECT HOUSE.PID AS PID, AVG(HOUSE.VALUE) as AVG
  FROM HOUSE
  GROUP BY PID
) HOUSES
WHERE PERSON.PID = HOUSES.PID OR PERSON.ID NOT IN (
  SELECT PID
  FROM HOUSE
)

该查询执行了我想要的操作,只是它不包括没有房屋的人,他们的房屋平均成本应为“ 0”。

这可能吗,还是我走了?

简单规则: 请勿FROM子句中使用逗号。 始终使用显式的JOIN语法。 例如,在这种情况下,您需要一个LEFT JOIN ,但是不能表达它。

SELECT p.NAME, AVG_VALUE
FROM PERSON p LEFT JOIN
     (SELECT PID , AVG(VALUE) as AVG_VALUE
      FROM HOUSE
      GROUP BY PID
     ) h
     ON p.PID = h.PID;

如果要0而不是NULLCOALESCE(AVG_VALUE, 0) as AVG_VALUE在外部查询COALESCE(AVG_VALUE, 0) as AVG_VALUE

您应该使用left join ,这样,出现在人员表中但在房屋表中没有对应记录的记录将使房屋列的null无效

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM