使用3个表更新值

时间:2013-10-24 02:02:11

标签: mysql sql

我已经尝试过这两个晚上,但不能这样做。我正在尝试使用三个表(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   |
+-----------+--------+--------------+

2 个答案:

答案 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);