我已经尝试过这两个晚上,但不能这样做。我正在尝试使用三个表(person,person_pet,pet)更新值。宠物的父母应该是拥有宠物的人。我试图通过仅使用pet.id和person_pet.pet_id进行一对一的比赛。 person_pet是一个关系表,说明哪个宠物属于哪个人。我能找到的最接近的答案是(Update SQL by joining 3 tables)。
这是我最好的镜头:
UPDATE pet
SET parent =
(SELECT person.id
FROM person, person_pet, pet
WHERE
person_pet.pet_id = pet.id);
请指点我正确的方向,谢谢!
以下是我一直在使用的确切表格:
人
+----+------------+-----------+------+------+--------------+--------+------+
| id | first_name | last_name | age | dead | phone_number | salary | dob |
+----+------------+-----------+------+------+--------------+--------+------+
| 0 | Zed | Shaw | 37 | NULL | NULL | NULL | NULL |
| 1 | Terry | Berry | 42 | NULL | NULL | NULL | NULL |
| 2 | Tyler | Brown | 25 | NULL | NULL | NULL | NULL |
| 3 | Frank | Smith | 100 | NULL | NULL | NULL | NULL |
宠物
+----+----------+------------+------+------+------+--------+
| id | name | breed | age | dead | dob | parent |
+----+----------+------------+------+------+------+--------+
| 0 | Zeds Pet | Unicorn | 1000 | 0 | NULL | NULL |
| 1 | Zeds Pet | Robot | 1 | 0 | NULL | NULL |
| 2 | Murphy | Yellow lab | 6 | 0 | NULL | NULL |
+----+----------+------------+------+------+------+--------+
person_pet
+-----------+--------+--------------+
| person_id | pet_id | purchased_on |
+-----------+--------+--------------+
| 0 | 0 | 0000-00-00 |
| 0 | 1 | 0000-00-00 |
| 2 | 2 | 0000-00-00 |
| 4 | 3 | 0000-00-00 |
| 5 | 4 | 0000-00-00 |
| 6 | 5 | 0000-00-00 |
| 7 | 6 | 0000-00-00 |
| 5 | 7 | 0000-00-00 |
+-----------+--------+--------------+
答案 0 :(得分:0)
假设person_pet有两列:pet_id和person_id,以下查询是否适合您?
UPDATE pet
SET parent = person_pet.person_id
FROM pet
INNER JOIN person_pet ON person_pet.pet_id = pet.id
WHERE COALESCE(pet.parent,-1) <> COALESCE(person_pet.person_id,-1)
在这种情况下,您不确定是否需要了解人员表。
答案 1 :(得分:0)
UPDATE pet
SET parent =
(SELECT person.id
FROM person, person_pet, pet
WHERE
person_pet.pet_id = pet.id and person_pet.person_id=person.person_id);