在INSERT SQL语句中嵌套SELECT查询

16

有人能告诉我为什么这不起作用吗?

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 "');"

好的...如果你在“statements”中添加缺失的单引号,它确实可以工作。哈哈 Gordon有一个更好的格式化语法。我授予他答案。 - lephleg
2个回答

28

values语句中嵌套的select看起来有问题(我不确定所有数据库都接受它)。更典型的表达方式是:

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'
              );

如果子查询返回多个值,则这一点尤其重要。那么查询很可能会出现错误。


在我修复了“treatments”中缺失的单引号后,它就像魔法般地工作了。但显然你的语法更合法。感谢你指出这一点! - lephleg
1
@LePhleg . . . 我已经重新表述了答案。一般来说,我不使用 values 因为它完全是冗余的,而 select 更加通用。 - Gordon Linoff

2

我因为忘记在“treatments”上加引号(')而出现了语法错误。


3
正确,但无关紧要。 - Dan Bracuk
那是语法错误@DanBracuk :) - lephleg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接