行をテーブルに挿入しようとするステートメントを探していますが、重複行が見つかった場合はその行の主キーを返します。テーブルの 1 つのフィールドは自動インクリメント主キーで、もう 1 つのフィールドは一意です。
質問する
1966 次
2 に答える
1
これは、少なくとも理論的にはうまくいくはずです:
最初にテーブルを拡張して、tinyint 型の追加の列ダミーを作成します。次に、挿入/更新時に次のクエリを使用できます。
INSERT INTO yourtable (a, b) VALUES (1, 2) ON DUPLICATE KEY UPDATE id = LAST_INSERT_ID(id), dummy = NOT dummy
(ここでは、列 a に一意のインデックスがあり、 a=1 の行が存在すると仮定しています。)
次に、新しい行 (INSERT の場合) または既存の行 (UPDATE の場合) の ID を取得できます。
SELECT LAST_INSERT_ID()
于 2010-06-20T10:45:43.073 に答える
0
これは DB2 で動作するはずですが、MySQL で動作するかどうか、または特別な MySQL 構文があるかどうかはわかりません。
SELECT pk, 'inserted' FROM FINAL TABLE (
INSERT INTO table (Col1)
SELECT Val1
FROM table
WHERE col1 != Val1
FETCH FIRST ROW ONLY
)
UNION
SELECT pk, 'existing'
FROM table
WHERE col1 = val1
ここでの考え方は、そこに一意の値がないときにテーブルから 1 つの行を選択し、新しい値を挿入して、テーブルから生成された主キーを返すことです。これは、一意の値が既にテーブルにある場合に対応するキーを返す選択と組み合わされます。これらのステートメントの 1 つだけが行を返す必要があり、2 番目の列は主キーが新規か既存かを示します。
于 2010-06-20T10:45:16.467 に答える