gpt4 book ai didi

mysql - INSERT INTO 基于 WHERE in double JOIN 的结果

转载 作者:太空宇宙 更新时间:2023-11-03 11:13:33 25 4
gpt4 key购买 nike

首先,架构不是我的。这是可怕的,非常困惑。还有一个警告 - 这很复杂。

我有 3 个表 - tbl_atbl_btbl_cswitch实际上是tbl_a中实体(记录)的一个属性。但它只能通过 tbl_b 上的 JOIN 访问,然后是 tbl_c:

  +---------+         +---------+         +---------+
| tbl_a | | tbl_b | | tbl_c |
+---------+ +---------+ +---------+
| a_id | +--> | b_id | +--> | c_id |
| b_fk | <--+ | c_fk | <--+ | switch |
+---------+ +---------+ +---------+

+---------+
| tbl_his |
+---------+
| his_id |
| a_fk |
| coef |
+---------+

要添加功能,我需要创建第四个表 (tbl_his) - 我已经完成了。在此表中,我有一个 coef 列,它可以取 1 到 100 之间的任何数字。我需要为表 tbl_his 中的每个 tbl_a 填充一条记录记录。当前数据 switch01

对于 tbl_a 中的每条记录与 0 相关的 switch 我应该将记录添加到 tbl_his 作为
NULL, 'a_id', '100'

如果记录开关是 1 我应该将以下记录添加到 tbl_his:
NULL, 'a_id', '50'

这个查询能完成一半的工作吗?有什么方法可以一次性完成 50 记录和 100 记录?

INSERT INTO `tbl_his` (`his_id`, `a_fk`, `coef`) VALUES (NULL, 'tbl_a.id', '100') 
WHERE (
SELECT tbl_a.id
FROM tbl_a
LEFT JOIN tbl_b ON tbl_a.b_fk = tbl_b.id
LEFT JOIN tbl_c ON tbl_b.c_fk = tbl_c.c_id
WHERE tbl_c.switch = '0')

最佳答案

没有INSERT INTO...WHERE 查询语法这样的东西。你要的是INSERT INTO...SELECT .

INSERT INTO 
tbl_his (a_fk, coef)
SELECT
tbl_a.id,
CASE WHEN tbl_c.switch = 0 THEN 100 ELSE 50 END
FROM
tbl_a
LEFT JOIN
tbl_b
ON
tbl_a.b_fk = tbl_b.id
LEFT JOIN
tbl_c
ON
tbl_b.c_fk = tbl_c.c_id

MySQL Manual :: Control Flow Functions

关于mysql - INSERT INTO 基于 WHERE in double JOIN 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6853132/

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