【问题标题】:Updating a Value with 3 Tables使用 3 个表更新值
【发布时间】:2013-10-24 02:02:10
【问题描述】:

我已经尝试了两个晚上来解决这个问题,但无法做到。我正在尝试使用三个表(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   |
+-----------+--------+--------------+

【问题讨论】:

  • 据我了解,联结或关系表只告诉我 person_id 和 pet_id。 pet 表包含一个父列。
  • 请分享您的表格数据...
  • 查看我的表格后,我注意到设置 person_pet 时出现的错误,其中行数过多。如果解决方案涉及我修复这个错误,那当然很好。谢谢

标签: mysql sql


【解决方案1】:

假设 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)

不确定在这种情况下您是否需要了解 person 表。

【讨论】:

  • 我在尝试插入时收到以下错误:错误 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的“FROM pet INNER JOIN person_pet ON person_pet.pet_id = pet.id WHERE COALESCE(pet.”附近使用正确的语法
  • 有什么我可以做的更好的解释吗?谢谢
【解决方案2】:
  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);

【讨论】:

  • 当我尝试插入它时会引发以下错误:错误 1093 (HY000): You can't specify target table 'pet' for update in FROM 子句
  • 您有什么需要知道的,我可以更好地解释一下吗?
猜你喜欢
  • 1970-01-01
  • 2020-03-12
  • 1970-01-01
  • 1970-01-01
  • 2021-05-04
  • 1970-01-01
  • 1970-01-01
  • 2016-07-27
  • 1970-01-01
相关资源
最近更新 更多