我正在尝试使用此查询更新一些记录,这基本上只是一种为客户设置“状态”的方法,考虑到他们“自上次订单以来的日子”:
UPDATE customers AS c1
INNER JOIN (
SELECT id, DATEDIFF(NOW(), agg.cdt) AS acdt
FROM customers
INNER JOIN
(
SELECT c.id AS cid, max(o.datetime) as cdt
FROM customers AS c
LEFT JOIN orders o ON o.customer_id = c.id
WHERE o.state = 20
GROUP BY c.id
) AS agg ON customers.id = agg.cid
WHERE account_type IN (1, 2)
AND deleted = 0
AND (account_management_state IN (0, 1, 2) OR account_management_state IS NULL)
) AS c2 ON c1.id = c2.id
SET c1.account_management_state = CASE
WHEN c2.acdt <= 90 THEN 0
WHEN c2.acdt >= 91 AND c2.acdt <= 360 THEN 1
WHEN c2.acdt > 360 OR c2.acdt IS NULL THEN 2
END
WHERE c1.id = c2.id;
但是我得到了:
错误代码: 1175年。您正在使用安全更新模式,并且您尝试更新不使用使用 KEY 列的 WHERE 的表 要禁用安全模式,请切换首选项中的选项 -
我在最终的 WHERE
中使用表键,c1.id
是客户
表键。使用 SET SQL_SAFE_UPDATES = 0;
不是一个选项。我还尝试使用“位置 c1.id
请注意,我试图手动运行查询,将
SET SQL_SAFE_UPDATES = 0;
,查询按预期工作,但这应该是一个自动过程。
所以我的选择是:
使用单个查询,SQL_SAFE_UPDATES
无法使用
使用Python游标,可以使用SQL_SAFE_UPDATES
。(见侧注)
[在此处插入选项]
(我不想这样做)迭代每个记录(使用Python ORM)并更新记录。这是愚蠢的,而且需要永远
还尝试了:
>
使用相同的标识
UPDATE
...
WHERE c1.id = c1.id ;
在每个子查询后添加一个巨大的限制(如@Akina所建议的):
UPDATE customers AS c1
INNER JOIN (
SELECT id, DATEDIFF(NOW(), agg.cdt) AS acdt
FROM customers
INNER JOIN
(
SELECT c.id AS cid, max(o.datetime) as cdt
FROM customers AS c
LEFT JOIN orders o ON o.customer_id = c.id
WHERE o.state = 20
GROUP BY c.id
LIMIT 100000000
) AS agg ON customers.id = agg.cid
WHERE account_type IN (1, 2)
AND deleted = 0
AND (account_management_state IN (0, 1, 2) OR account_management_state IS NULL)
LIMIT 100000000
) AS c2 ON c1.id = c2.id
SET c1.account_management_state = CASE
WHEN c2.acdt <= 90 THEN 0
WHEN c2.acdt >= 91 AND c2.acdt <= 360 THEN 1
WHEN c2.acdt > 360 OR c2.acdt IS NULL THEN 2
END
WHERE c1.id = c2.id;
两个id的组合:
UPDATE
...
WHERE c1.id > 0 and c2.id > 0;
它们都不起作用。仍然收到
错误代码: 1175
。
这是使用MySQL python客户端和游标的Python/Flask进程的一部分。我可以使用
SQL_SAFE_UPDATES
,只要它是从Python游标完成的。这不起作用:
>
使用不同的查询(不会抛出错误,只是不会更新任何内容):
connection = db.get_conn()
cursor = connection.cursor()
cursor.execute('SET SQL_SAFE_UPDATES = 0;')
cursor.execute(query) # from the original query
cursor.execute('SET SQL_SAFE_UPDATES = 1;')
使用单个查询(不抛出错误,它只是不会更新任何东西):
connection = db.get_conn()
cursor = connection.cursor()
cursor.execute('''
SET SQL_SAFE_UPDATES = 0;
UPDATE ...;
SET SQL_SAFE_UPDATES = 1;
''')
使用<代码>开始..END
(我想我看到了曙光,但是没有),得到一个< code>ProgrammingError:
connection = db.get_conn()
cursor = connection.cursor()
cursor.execute('''
BEGIN
SET SQL_SAFE_UPDATES = 0;
UPDATE ...;
SET SQL_SAFE_UPDATES = 1;
END
''')
我知道这已经很长时间了,但也许今天你我都有同样的问题。我已经通过在关闭连接之前提交我的更改来解决了这个问题,只需在关闭连接“cnx.commit()”之前添加此内容,希望这能有所帮助
我只是想做一个简单的“教程”应用程序来获取我手机的位置(学习如何在其他应用程序中使用它),但我哪儿也没得到。 > Android Developer的教程:首先,我按照教程在Android的开发者站点(developer.android.com/training/location/receive-location-updates.html)。 正如这里所指出的,我使用了Location、Locat
我痛苦了3天。我正在使用兼容性库中的视图分页程序。我已经成功地让它显示了几个视图。我的问题是,当我交换视图时,不会在它的回收器视图中按片段更新数据。但当我关闭应用程序时,打开碎片会按回收器视图显示更新内容。我使用了所有方法,如setnotifydatachanged()和许多其他方法,但viewpager中的片段不更新内容。感谢所有的帮助,这是我的主要活动
我正在用一些初始数据绘制一个条形图,然后在单击按钮时尝试更新。我收到错误“未捕获的类型错误:无法读取未定义的属性'长度'”。单击更新后,将发生错误。如何解决此问题并启用更新功能以绘制新的条形图? D3代码:
问题内容: 我正在尝试使用array 更新 ng-grid。我 这里 有个小伙伴。 添加按钮添加新行。更新按钮更新阵列中的最后一项。 选择一行并按更新按钮。没发生什么事。 按添加按钮。现在,UI将使用新元素&以及以前更新的元素进行更新。 相同的行为一次又一次地重复。 我试过了。我得到: “错误:$ apply已经在进行中” 我什至尝试通过将块放置在呼叫中来进行尝试。同样是同样的错误! 任何指针!
编辑:我已经用一个带有PropertyValueFactory的cellValueFactory创建了和TableView,但是当我更新表示TableView数据的ObservableList时,我的TableView将不会更新。我确信readNctsvorgaenge()创建的新列表已经更新,并且包含了附加项。这是用mvvmfx->moodel view viewmodel实现的 这是FXML文
问题内容: 这里的PLUNKR示例 我正在使用某种形式的jquery autocomplete作为angularjs direcitve。当jquery使用angular 更新输入的值时,直到下一个摘要(我想)之后才注意到更改。 我的第一个想法是使用来对后摘要执行操作,但是如您所见,它没有帮助。 我的第二种方法是重写该元素的功能以触发事件,但是我没有设法使其起作用。 尝试从自动完成列表中选择一个值