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

时间:2016-09-17 17:11:10

标签: mysql sql

让我们说我有以下查询来列出人们拥有的房屋的平均价值:

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"作为他们的房屋成本平均值。

这可能,或者我离开了吗?

2 个答案:

答案 0 :(得分:2)

简单规则:从不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而不是NULL,请在外部查询中使用COALESCE(AVG_VALUE, 0) as AVG_VALUE

答案 1 :(得分:0)

您应该使用left join,这样就会出现在人员表中的记录,并且在房屋表中没有相应的记录,这些记录会在房屋的列上显示空格