4

2 つのテーブルがあります: tbl_listings、列: prop_id; もう 1 つのテーブル: tbl_bookings には、列 prop_id、booking_date があります。

prop_id が tbl_bookings に出現する回数をすべてカウントし、そのクエリの結果を tbl_listings の新しい列に入力するクエリを作成したいと考えています。

私のクエリは次のようになります:

ALTER TABLE tbl_listings
ADD COLUMN prop_count INT

UPDATE tbl_listings
    SET prop_count =
    (SELECT COUNT(*)
    FROM tbl_bookings
    GROUP BY prop_id)

しかし、何らかの理由で、「サブクエリが複数の行を返します」というエラーが表示されます。これを修正するにはどうすればよいですか?

4

1 に答える 1

6

そのサブクエリは、それぞれの個別のカウントを提供しますprop_id。にはカウント値を 1 つだけ割り当てることができますprop_count。prop_ids に対応する in 複数の行を更新する場合は、 inと対応するinprop_countを関連付ける相関サブクエリを更新に追加する必要があります。prop_idtbl_bookingsprop_idtbl_listings

あなたの質問についてもっと考えると、更新ではなく空の tbl_listings テーブルに挿入するつもりだったのだろうかと思います。次のコマンドでそれを行うことができます:

INSERT INTO tbl_listings(prop_id,prop_count)
SELECT prop_id, COUNT(*) as prop_count
FROM tbl_bookings
GROUP BY prop_id

本当に更新するつもりで、それぞれprop_idがテーブルに存在すると想定しているtbl_listings場合は、次の更新を発行できます。

UPDATE tbl_listings
SET prop_count=(SELECT COUNT(*) 
                FROM tbl_bookings AS TB
                WHERE TB.prop_id=TL.prop_id)
FROM tbl_listings AS TL

tbl_listings新しい prop_ids fromtbl_bookingsとそれぞれのカウントを挿入して更新する場合は、次のようにします。

INSERT INTO tbl_listings(prop_id,prop_count)
SELECT prop_id, COUNT(*) as prop_count
FROM tbl_bookings AS TB
WHERE NOT EXISTS(SELECT prop_id -- Insert only new prop_ids/counts
                 FROM tbl_listings AS TL 
                 WHERE TL.prop_id=TB.prop_id)
GROUP BY prop_id
于 2013-08-09T16:26:19.727 に答える