次のシナリオを実現するために、個別の SQL クエリを作成しないようにしています。
Values というテーブルがあります。
値:
id INT (PK)
data TEXT
特定のデータがテーブルに存在するかどうかを確認し、存在する場合はその ID を返し、そうでない場合は挿入して ID を返します。
(非常に)単純な方法は次のとおりです。
select id from Values where data = "SOME_DATA";
id が null でない場合は、取得します。id が null の場合:
insert into Values(data) values("SOME_DATA");
再度選択して ID を表示するか、返された ID を使用します。
上記の機能を1行で作成しようとしています。私は近づいていると思いますが、まだそれを作ることができませんでした: これまでのところ、私はこれを得ました:
select id from Values where data=(COALESCE((select data from Values where data="SOME_DATA"), (insert into Values(data) values("SOME_DATA"));
2 番目の選択が null を返し、COALESCE の 2 番目の引数が返されるという事実を利用しようとしています。これまでのところ成功していません。私は何が欠けていますか?