2016-09-17 6 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ある家から列にNULL値をGRTます家のテーブルのレコードに対応していleft joinを使用する必要があり、あなたが必要です左にJOIN – Mihai

+0

ミハイがそれを釘付けにした。しかし、まだ苦労している場合は、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- join) – Drew

答えて

2

簡易ルール:なしは、FROM句にカンマを使用します。 常には、明示的なJOIN構文を使用します。たとえば、この場合、LEFT JOINが必要ですが、表現することはできません。あなたの代わりにNULL0をしたい場合は

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; 

、外側のクエリでCOALESCE(AVG_VALUE, 0) as AVG_VALUEを使用しています。

+0

有効であるが、同じエイリアスを2回使用すると少し混乱する。 – Strawberry

0

あなたは、人のテーブルに表示され、いけない、そのようレコードが

関連する問題