2016-09-17 111 views
0

比方說,我有以下查詢列出房子的人擁有的平均值:如何檢查一個子查詢的結果中是否存在一個ID?

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」。

這是可能的,還是我的方式?

+1

您的查詢基本上是一個INNER與另一個子查詢加盟,你需要一個左加入 – Mihai

+0

Mihai的釘牢它。但是如果你還在掙扎,請參閱http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a -very-simple-sql-query – Strawberry

+0

[MySQL:連接類型的快速細分]的可能重複(http://stackoverflow.com/questions/6294778/mysql-quick-breakdown-of-the-types-of-加入) – Drew

回答

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

+0

雖然有效,但兩次使用相同的別名有點令人困惑。 – Strawberry

0

您應該使用left join,出現在個人表和不這樣記錄都有相應的房屋表中的記錄將GRT在列空的房子

相關問題