带有Select / Join的MySQL Update表

时间:2015-01-25 21:07:05

标签: mysql select join

请注意:我正在使用MySQL Workbench,所以有些错误可能与此有关(我不是100%肯定我害怕)

您好,

我正在为我的Uni项目工作,我接受一个CSV文件,其中包含客人列表和信息,例如他们感兴趣的课程区.CSV文件将包含感兴趣区域的实际名称,因为这个来自注册网页(开放日)。

我正在尝试访问我的Guest(joinTest)表中的感兴趣区域,加入Interests表(包含它们的ID号以及兴趣名称)并填充Guests中的InterestID列表

我现在正在使用测试表,直到我获得了SQL权限。这是我目前使用的SQL:

UPDATE joinTest
SET interestID = 
 (
   SELECT interest.interestID FROM joinTest 
   LEFT JOIN interest on joinTest.interestName = interest.interestName
 )
WHERE interestID IS NULL;

我已经尝试过并收到错误

Error Code: 1093. You can't specify target table 'joinTest' for update in FROM clause

所以我假设我在UPDATE中加入一个连接时不能使用SELECT子句。

然后我尝试了这个:

UPDATE joinTest
INNER JOIN interest
ON jointest.interestname = interest.interestName
SET joinTest.interestID = interest.interestID;

我收到此错误:

Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Queries and reconnect.

我现在完全被难倒了。我不知道从哪里开始。

如果需要更多信息,请告知我们。

2 个答案:

答案 0 :(得分:1)

它是MySQL Workbench的具体内容。您可以在设置中禁用此行为,因为您的错误消息建议您:... toggle the option in Preferences -> SQL Queries and reconnect

PS您可以在没有SET SQL_SAFE_UPDATES = 0;的代码中安全地运行此查询。

答案 1 :(得分:1)

默认情况下禁用SQL_SAFE_UPDATES,但Workbench启用它。如错误消息所示:toggle the option in Preferences -> SQL Queries and reconnect.

除非您在Web应用程序(php)中专门打开SQL_SAFE_UPDATES,否则不应存在此错误。