web-dev-qa-db-ja.com

INSERT SQLステートメントでネストされたSELECT

これが機能しない理由を誰かに教えてもらえますか?

INSERT INTO Medical_History (pid, grafts, allergies,  diseases, surgearies, treatment)
VALUES ((SELECT pid FROM Pet WHERE pet_name='Jack' AND cid=(SELECT cid FROM Customer WHERE last_name='Iwannidis' AND first_name='Giwrgos')),
       'grafts', 'allergies', 'diseases', 'surgearies', treatments');

構文エラーが発生します:

unrecognized token "');"
11
lephleg

selectステートメントにネストされているvaluesは間違っているように見えます(すべてのデータベースがそれを受け入れるかどうかはわかりません)。これを表現するためのより一般的な方法は次のとおりです。

INSERT INTO Medical_History (pid, grafts, allergies,  diseases, surgearies, treatment)
    SELECT pid, 'grafts', 'allergies', 'diseases', 'surgearies', 'treatments'
    FROM Pet
    WHERE pet_name='Jack' AND
          cid=(SELECT cid
               FROM Customer
               WHERE last_name='Iwannidis' AND first_name='Giwrgos'
              );

これは、サブクエリが複数の値を返す場合に特に重要です。次に、クエリはエラーになる可能性があります。

22
Gordon Linoff