2013-12-13 5 views
0
UPDATE animals 
     SET dog = dog + 1 
     from animal_names, color 
     WHERE animal_names.name = "Buddy" and color.name = "Yellow"; 

По существу, я хочу добавить 1 к количеству собак на столе «животные». Однако животные используют внешние ключи «animal_names» и «color». Тем не менее, я хочу обновить животных, не используя идентификаторы этих внешних ключей, вместо этого желая использовать строку, а не их идентификатор.Заявление SQL для обновления таблицы на основе внешних ключей

+0

huh? У вас есть 3 стола (животные, животные_имя, цвет)? Какая связь между ними? – Greg

+0

Я думаю, что вопрос непонятен. Сначала вы должны объяснить, каковы структуры ваших таблиц, каковы отношения FK, затем объяснить, что вам нужно, и привести пример кода, а также указать, работает ли он, но вам нужно улучшить, из-за чего возникает ошибка. –

ответ

0

Вам просто нужно указать отношение в разделе from вашего «обновления». Например:

UPDATE animals 
SET dog = dog + 1 
FROM animals 
    INNER JOIN animal_names 
    ON animals.nameID = animal_names.nameID 
    INNER JOIN color 
    ON animals.colorID = color.colorID 
WHERE 
    animal_names.name = "Buddy" 
    AND 
    color.name = "Yellow" ; 

(. Если предположить, для этого примера, что ваши первичные ключи одноименных целые числа, как и выше)

0

Я не могу работать из структуры таблицы - я не могу совсем понимаю как у вас будет собака на столе для животных, поэтому я угадаю.

UPDATE animals 
     SET dog = dog + (
     select count(*) 
     from animal_names inner join color on (whatever) 
     WHERE animal_names.name = "Buddy" and 
     color.name = "Yellow" and 
     animal_names.animaltype='dog' 
    ) 

Возможно, не совсем верно, но может помочь вам.

Смежные вопросы