gpt4 book ai didi

mysql - 引用另一个表的行级值 - 在 IF 条件下执行 INSERT INTO ... ON DUPLICATE KEY UPDATE

转载 作者:行者123 更新时间:2023-11-29 04:35:34 27 4
gpt4 key购买 nike

我有订单和采购。采购有很多订单。

当订单行重复时,我正在尝试使用 ON DUPLICATE KEY UPDATE ONLY IF 采购表中的连接行具有具有特定值的特定列.

INSERT INTO `orderlines` 
(col1, col2)
VALUES
('val1', 'val2')
ON DUPLICATE KEY UPDATE
col3 = IF (purchases.status_id=0, 'truevalue' , col3);

所以这个查询只处理 orderlines 表。但我想从 purchases 表中引用 purchases.status_id

我不知道如何使 purchases 表中的字段在此查询中可用。

  • 我是否在某个时刻进行了 LEFT JOIN?
  • INSERT INTO ... SELECT 似乎不适合我正在尝试做的事情,因为它试图将选定的列插入表本身。我只想引用另一个表中特定行的列值,仅用于比较。

最佳答案

不,您不能像您在假设解决方案中显示的那样在表达式中直接引用另一个表。

Dhruv Saxena 的解决方案之所以有效,是因为它使用了子查询。

但是使用 INSERT...SELECT 应该更容易:

INSERT INTO `orderlines` 
(order_id, col1, col2, col3)
SELECT id, 'val1', 'val2', IF(status_id=0, 'truevalue', NULL)
FROM purchases
WHERE order_id=1
ON DUPLICATE KEY UPDATE
col3 = COALESCE(VALUES(col3), col3);

仅当来自 purchases 的请求行具有条件 status_id=0 时,才会为 col3 分配“真值”字符串。如果不是,则它保持 col3 不变,因为选择列表中的 NULL 使 COALESCE() 返回它的第二个参数。

我不确定我的列是否适合您的表关系,但此解决方案应该展示了该技术。

关于mysql - 引用另一个表的行级值 - 在 IF 条件下执行 INSERT INTO ... ON DUPLICATE KEY UPDATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43105677/

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