13

他のテーブルの外部キーを使用して、1 つのテーブルを更新したいと考えています。

私はこのようなことをしようとしています:

UPDATE tbl_1 
SET field1 = 6, field12 = NULL 
WHERE field3 = (SELECT tbl_2.item1 
                FROM tbl_1, tbl_2 
                WHERE tbl_1.field3 = tbl_2.item1 AND tbl_2.item2 = 135)

また

UPDATE tbl_1 
SET field1 = 6, field12 = NULL 
WHERE field3 = (SELECT item1 FROM tbl_2 WHERE item2 = 135)
4

5 に答える 5

7

次のいずれかが機能すると思います。

UPDATE  tbl_1 
SET     field1 = 6, field12 = NULL 
WHERE   EXISTS 
        (   SELECT 1
            FROM tbl_2 
            WHERE tbl_1.field3 = tbl_2.item1 
            AND tbl_2.item2 = 135
        )

また

UPDATE  tbl_1 
SET     field1 = 6, field12 = NULL 
WHERE   field3 IN (SELECT item1 FROM tbl_2 WHERE item2 = 135)
于 2012-04-05T11:33:24.580 に答える
4

これは、SELECT が複数の行を返すためです。代わりにこれを行います:

UPDATE tbl_1 SET field1 = 6, field12 = NULL 
WHERE field3 IN (SELECT item1 FROM tbl_2 WHERE item2 = 135)

SELECTテーブル (または複数の行)INが使用されるときに返されます。内部クエリが 1 行のみを返す必要があることが確実な場合は、それに応じて内部クエリを調整する必要があります。このように:

UPDATE tbl_1 SET field1 = 6, field12 = NULL 
WHERE field3 = (SELECT item1 FROM tbl_2 WHERE item2 = 135 ORDER BY myValue LIMIT 1)

ここで使用する方が安全INです。SELECT ステートメントから返された単一のレコードと複数のレコードの両方を処理できるからです。

于 2012-04-05T11:26:41.247 に答える
3

次のような INSERT OR REPLACE ステートメントを使用することもできます。

tbl_1 に 4 つの列 (キー、フィールド 1、フィールド 2、フィールド 3) があり、フィールド 2 を tbl_2
の一致する値で更新するとします。

INSERT OR REPLACE INTO tbl_1
SELECT tbl_1.key, tbl_1.field1, tbl_2.value, tbl_1.field3
FROM tbl_1 JOIN tbl_2 ON tbl_2.key = tbl_1.key
于 2013-03-15T04:38:22.963 に答える
0

単一値の場合:

UPDATE tbl_1 
SET field1 = 6, field12 = NULL 
WHERE field3 = (SELECT tbl_2.item1 
                FROM tbl_1, tbl_2 
                WHERE tbl_1.field3 = tbl_2.item1 AND tbl_2.item2 = 135)

複数の値の場合

UPDATE tbl_1 
SET field1 = 6, field12 = NULL 
WHERE field3 IN (SELECT tbl_2.item1 
                FROM tbl_1, tbl_2 
                WHERE tbl_1.field3 = tbl_2.item1 AND tbl_2.item2 = 135)
于 2012-04-05T11:27:06.657 に答える
0

このように使用できます

UPDATE tbl_1 
SET field1 = 6, field12 = NULL 
WHERE field3 in (SELECT tbl_2.item1 
                FROM tbl_1, tbl_2 
                WHERE tbl_1.field3 = tbl_2.item1 AND tbl_2.item2 = 135)

sqllite は、更新クエリでの結合をサポートしていません。これはオプションの1つです

于 2012-04-05T11:27:43.420 に答える