2017-08-10 5 views
1

こんにちは私は以下のツリーテーブルを持っており、「望みの結果」というテーブルを達成したいと思います。 最初は家の名前、2番目の家の名前は各家の部屋の名前、3番目の名前は各部屋の価格です。 私は家ごとの部屋数を求めています。SQL-基準でテーブル(LEFT JOIN)からカウントを取得する

のtable_1

nid name 
1  House 1 
2  House 2 
3  House 3  

table_2

Name  house_ref_id id 
Room1 1    20 
Room1 2    21 
Room1 2    22 
Room1 3    23 
Room1 3    24 

table_3

Price room_ref_id 
0  20 
100  21 
150  22 
0  23 
120  24 

募集結果:

nid  name  Rooms w/ price 
1  House1  0 
2  House2  2 
3  House3  1 

私は、次のコードを試してみましたが、価格

SELECT Name, COUNT(price) AS "rooms w/ price" FROM table_1 
LEFT JOIN table_2 ON table_1.id = table_2.ref_id 
LEFT JOIN table_3 ON table_2.room_ref_id = table_3.id 
WHERE table_3.price>0 
GROUP BY table_1.nid 

で部屋の適切な量を得ることができるが、以下を得た:

nid  name  rooms w/ price 
1  nouse1 1 
2  house2 2 
3  house3 2 
+0

WHERE table_3.price = 0 OR table_3.price IS NULL '? – StanislavL

+0

あなたのデータによれば、 'nid = 1'は出力に全く含まれてはいけません。また、実際に使用しているデータベースと一致するようにタグを修正する必要があります。 –

+0

ゴードンさん、ありがとう、私はSELECT句にnidを含めるのを忘れていましたが、答えはありがとうございました – Luis

答えて

1

閉じます。 WHEREの条件は、外部結合を内部結合に変換します。 ON句に移動する必要があります。

SELECT Name, COUNT(table3.id) AS "rooms w/ price" 
FROM table_1 LEFT JOIN 
    table_2 
    ON table_1.id = table_2.ref_id LEFT JOIN 
    table_3 
    ON table_2.room_ref_id = table_3.id AND table_3.price > 0 
GROUP BY table_1.nid; 
+0

ありがとう、本当にうまくいった! Where Clauseがうまく機能するように見直します。 多くのありがとう – Luis

関連する問題