mam 3 tabele w mojej lokalnej bazy danych PostgreSQL:Aktualizacja PostgreSQL z wewnętrznym sprzężeniem w 2 tabelach?
[myschema].[animals]
--------------------
animal_id
animal_attrib_type_id (foreign key to [myschema].[animal_attrib_types])
animal_attrib_value_id (foreign key to [myschema].[animal_attrib_values])
[myschema].[animal_attrib_types]
--------------------------------
animal_attrib_type_id
animal_attrib_type_name
[myschema].[animal_attrib_values]
--------------------------------
animal_attrib_value_id
animal_attrib_value_name
Na starcie będzie Znam animal_id
. I trzeba uruchomić SQL do zaktualizowania animal_attribute_value_name
powiązanych z tej pozycji, więc coś takiego:
UPDATE
animal_attribute_values aav
SET
aav.animal_attribute_value_name = 'Some new value'
WHERE
# Somehow join from the provided animal_id???
może muszę zrobić jakąś zagnieżdżonego SELECT
lub INNER JOIN
wewnątrz klauzuli WHERE
, ale nie wiem, jak to zrobić. Z góry dziękuję!
Edit:
Powiedzmy mam rekord animal
z następujących wartości:
[myschema].[animals]
--------------------
animal_id = 458
animal_attrib_type_id = 38
animal_attrib_value_id = 23
a odpowiadający animal_attrib_value
(z id = 23) ma następujące wartości:
[myschema].[animal_attrib_values]
--------------------------------
animal_attrib_value_id = 23
animal_attrib_value_name = 'I am some value that needs to be changed.'
W czasie wykonywania mam tylko animal_id
(458). Muszę wyszukać odpowiadający animal_attrib_value
(23) i zmienić jego animal_attrib_value_name
na 'Some new value'
, wszystkie wewnątrz pojedynczej instrukcji UPDATE.
Jaki jest sens [] wokół identyfikatorów? – wildplasser
nic, tylko tam dla atrakcyjności wizualnej; pomaga mi znacznie łatwiej zobaczyć "segmenty" (schematy, tabele, pola); domyślam się, że pożyczyłem to od moich dni MS SQL – IAmYourFaja
Twoja intencja nie jest jasna. Czy chcesz zaktualizować "zwierzę", zmieniając jeden z jego atrybutów, aby (wskazywać) na nową wartość? Ponadto pomocne byłyby rzeczywiste definicje tabel. – wildplasser