0

私はこれを2夜にわたって理解しようとしましたが、できません。3 つのテーブル (person、person_pet、pet) を使用して値を更新しようとしています。ペットの親は、ペットを所有している人でなければなりません。pet.id と person_pet.pet_id のみを使用して、1 対 1 の一致を得ようとしています。person_pet は、どのペットがどの人物に属しているかを示す関係テーブルです。私が見つけた最も近い答えはここでした(3つのテーブルを結合してSQLを更新する)。

これが私のベストショットです:

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   |
+-----------+--------+--------------+
4

2 に答える 2

0

person_pet に pet_id と person_id の 2 つの列があると仮定すると、次のクエリは機能しますか?

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 テーブルについて知る必要があるかどうかさえわかりません。

于 2013-10-24T02:09:05.537 に答える