3

簡単に類推すると、次のような表があります。

id(PK)| gift_giver_id(FK)| gift_receiver_id(FK)| gift_date

その人がこれまでに10個未満のギフト(つまり、同じgift_giver_idで10行未満)を持っている場合にのみ、行(つまり、人への別のギフト)を追加するような方法で単一のクエリでテーブルを更新することは可能ですか? ?

これの目的は、テーブルのサイズを1人あたり10ギフトに制限することです。

前もって感謝します。

4

3 に答える 3

3

試す:

insert into tablename
   (gift_giver_id, gift_receiver_id, gift_date)  
select GIVER_ID, RECEIVER_ID, DATE from Dual where  
   (select count(*) from tablename where gift_receiver_id = RECEIVER_ID) < 10
于 2010-01-07T05:34:32.400 に答える
2

「それはまた、『そうでなければ、最も古い行のフィールドを更新する』ということでしょうか?」

そして、それはまた、かなり血まみれの重要な付属文書になるでしょうか:P

単一のクエリで複雑なことを行うことはありません。最初に最も古いものをテストするように選択し、それに応じて更新または挿入します。

SQL 以外のどの言語で作業しているのかわからないので、SQL 以外の部分の疑似コードに固執します。

SELECT TOP 1 id FROM gifts
WHERE (SELECT COUNT(*) FROM gifts WHERE gift_giver_id = senderidvalue
ORDER BY gift_date ASC) > 9;

{if result.row_count then}

INSERT INTO gifts (gift_giver_id, gift_receiver_id,gift_date)
VALUES val1,val2,val3

{else}

UPDATE gifts SET gift_giver_id = 'val1',
gift_receiver_id = 'val2',gift_date = 'val3'
WHERE {id = result.first_row.id}

リクエストの問題は、SELECT と INSERT または UPDATE のいずれかを実行する単一のクエリを見つけようとしていることです。誰かがやって来て、私が間違っていることを証明するために私に電話をかけるかもしれませんが、ストアドプロシージャにアクセスしたくない限り、あなたは不可能なことを求めていると思います.

于 2010-01-07T05:48:06.740 に答える
1

私はSQLの第一人者ではありませんが、次のようなものが機能するはずだと考えています:(ギフトのテーブル名を想定)::

INSERT INTO gifts (gift_giver_id, gift_receiver_id,gift_date)
SELECT DISTINCT senderidvalue,receiveridvalue,datevalue FROM gifts
WHERE (SELECT COUNT(*) FROM gifts WHERE gift_giver_id = senderidvalue ) < 10;

[編集]コードのフォーマットは私を好きではありません:(

于 2010-01-07T05:38:10.597 に答える