1

次のようなデータベースがあります。

fooには列がidあり、namebarには列がidあり、foo_id

を含む受信 HTTP クエリがあります。適切に設定さfoo.nameれた に行を挿入したいと思います。たとえば、次のようになります。barbar.foo_id

> SELECT * FROM foo;
id     name
------ -------
1      "Andrey"
(1 row)


> SELECT * FROM bar;
(0 rows)

与えられた場合"Andrey"、取得するために実行できる単一のクエリはありますか:

> SELECT * FROM bar;
id     foo_id
------ -------
1      1
(1 row)

私は次のように考えていました:

> UPDATE bar SET foo_id=(SELECT id FROM foo WHERE foo.name=?)

しかし、これは間違っているようです.SELECTのリターンセットは値ではなく...

4

4 に答える 4

4

あなたがしなければならないだろう

SELECT TOP 1 ID FROM foo where foo.name=?

それ以外は、更新で選択を行うことに問題はありません。

于 2009-04-22T17:23:42.080 に答える
2

サブクエリが 1 つの値 (MAX() や TOP 1 など) のみを返す場合、これは MS SQL Server で機能します。

この構文が MySQL で分岐するかどうかはわかりませんが、試すことができます...

UPDATE
  bar
SET
  bar.foo_id = foo.id
FROM
  bar
INNER JOIN
  foo
    ON foor.name = bar.name
ORDER BY
  foo.id

この場合、結合が bar のレコードごとに複数の結果を返す場合、それらすべてが適用されます。それらが適用される順序を決定することによる順序、および永続的な最後の順序。

于 2009-04-22T17:27:20.277 に答える
0

これは、少なくとも sql サーバーと oracle で機能します。

于 2009-04-22T17:23:44.077 に答える
0

フォローしてみてください

UPDATE bAR SET foo_id = F.id FROM bar JOIN (foo.name = @fooName の foo から ID を選択) F

于 2009-04-22T17:29:04.423 に答える