gpt4 book ai didi

mysql - 使用一个查询在父级上使用外键 UPDATE FROM SELECT

转载 作者:行者123 更新时间:2023-11-29 14:36:02 25 4
gpt4 key购买 nike

如果两个选择中的first_table.email 匹配,如何更新(从第一个选择表值第二个更改)第二个表.first_table_id。

如果可能的话。通过一次查询!

---------------------------------------- 更新 -- ---------------------------------------------------

示例:

如果第一个表中的电子邮件字段匹配,我需要更新第二个表的外键。我需要比较具有不同parent_id的两个查询结果( parent 与 child 在同一个表中)

         table_1
-------------------------
| id | parent_id | email |
-------------------------
1 NULL NULL
2 NULL NULL
3 1 joe@m.ru
4 2 bob@f.ly
5 1 bob@f.ly
6 2 kira@.us

table_2
----------------
| id | first_id |
----------------
1 3
2 4
3 5
4 6
  1. 我有两个 ID 为 1 和 2 的 parent 以及一些 child (ID:3、4、5、6)。

  2. 另外,请记住:1 - 旧2 - 新

  3. 任务:如果 parent_id = 1 的子电子邮件地址与 parent_id = 2 的子电子邮件地址匹配,则更改第二个表中的外键(相同)。

  4. 在我们的示例中,第二个表行的 id = 3 其外键字段 - first_id 必须从 5 更改为 4.

最佳答案

以下内容可能会帮助您入门

UPDATE  Table_2 t2u
SET first_id = (
SELECT t2.first_id
FROM Table_2 t2
INNER JOIN Table_1 t1 ON t1.id = t2.first_id
INNER JOIN (
SELECT parent_id = MAX(parent_id), email
FROM Table_1
GROUP BY
email
) t1p ON t1p.email = t1.email
INNER JOIN Table_1 t1i ON t1i.email = t1p.email
AND t1i.parent_id = t1p.parent_id
WHERE t2u.first_id <> t1i.id)

测试脚本(SQL Server)

;WITH Table_1 (id, parent_id, email) AS (
SELECT 1, NULL, NULL
UNION ALL SELECT 2, NULL, NULL
UNION ALL SELECT 3, 1, 'joe@m.ru'
UNION ALL SELECT 4, 2, 'bob@f.ly'
UNION ALL SELECT 5, 1, 'bob@f.ly'
UNION ALL SELECT 6, 2, 'kira@.us'
)
, Table_2 (id, first_id) AS (
SELECT 1, 3
UNION ALL SELECT 2, 4
UNION ALL SELECT 3, 5
UNION ALL SELECT 4, 6
)
SELECT t2.*, t1i.id as [update with]
FROM Table_2 t2
INNER JOIN Table_1 t1 ON t1.id = t2.first_id
INNER JOIN (
SELECT parent_id = MAX(parent_id), email
FROM Table_1
GROUP BY
email
) t1p ON t1p.email = t1.email
INNER JOIN Table_1 t1i ON t1i.email = t1p.email
AND t1i.parent_id = t1p.parent_id
WHERE t2.first_id <> t1i.id

输出

id          first_id    update with 
----------- ----------- -----------
3 5 4

关于mysql - 使用一个查询在父级上使用外键 UPDATE FROM SELECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9025270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com