2013-05-28 2 views
11

Может кто-нибудь сказать мне, почему это не работает?Вложенный SELECT в INSERT sql statement

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

хорошо ... он работает, если вы добавите отсутствующие «в» операторы ». lol Гордон получил более сильный форматированный синтаксис tho. Я даю ему ответ. – LePhleg

ответ

22

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

Это особенно важно, если вложенный запрос возвращает более одного значения. Тогда запрос, скорее всего, получит ошибку.

+0

После того, как я исправил недостающие «процедуры», он работал как шарм. Но, очевидно, ваш синтаксис кажется гораздо более законным. Спасибо что подметил это! – LePhleg

+1

@LePhleg. , , Я перефразировал ответ. В общем, я просто не использую 'values', потому что он полностью избыточен, а' select' более универсален. –

-1

У меня была синтаксическая ошибка, потому что я забыл котировки (') на «лечение».

+2

правда, но не имеет значения. –

+0

Это была ошибка синтаксиса @DanBracuk :) – LePhleg