我正在努力解决Laravel Eloquent查询中的SQL语法问题。因此,我直接回到了根目录,并尝试使用简单的SQL进行查询。我被难住了。我不是专家,但这让我很困惑。
我已经看过Update with Join in SQLite的帖子了,但我认为其中一个更多的是关于连接的问题。
我在SQLLite上测试了这一点,它肯定代表了SQL本身?
两个表:说明和知识。我想根据(最新的)说明更新Knowns中的一个专栏。做好这件事,我就可以自己解决剩下的问题(我希望!)。
-- This works fine
Select instructions.rowid from instructions
where instructions.EngagementTitle not null
-- This doesn't
UPDATE knowns
SET EngagementTitle = instructions.EngagementTitle
WHERE id IN (
SELECT knowns.id
FROM knowns
INNER JOIN instructions
ON knowns.reference = instructions.reference
)
错误消息
no such column: instructions.EngagementTitle:
UPDATE knowns
SET EngagementTitle = instructions.EngagementTitle
WHERE id IN (
SELECT knowns.id
FROM knowns
LEFT JOIN instructions
ON knowns.reference = instructions.reference
)
这两个表都检查了列的三元组。
`EngagementTitle` varchar NOT NULL
我遗漏了什么?
发布于 2018-06-05 09:05:36
UPDATE knowns
SET EngagementTitle = instructions.EngagementTitle
...
instructions
表在这里不是“已知的”,只有knowns
。表表达式的作用域仅为“向下”。您可以在子查询中使用超级查询中引入的表,但反之亦然。
尝试使用子选择:
UPDATE knowns
SET engagementtitle = (SELECT instructions.engagementtitle
FROM instructions
WHERE instructions.reference = knowns.reference)
WHERE EXISTS (SELECT *
FROM instructions
WHERE instructions.reference = knowns.reference);
我还把你的WHERE
换成了EXISTS
。我猜这就是你真正想要的。它只会更新instructions
中存在条目的knowns
中的行。按照您的方式,在对IN
的子查询中使用LEFT JOIN
时,您只是更新了所有行,因为LEFT JOIN
包含来自左表的所有行,因此来自knowns
的所有ID都包含在结果中(您可能需要一个INNER JOIN
,这是可行的)。
但请注意,对于knowns
中的一行,instructions
中的条目不能超过一个,这样才能正常工作。我默默地认为情况就是这样。
https://stackoverflow.com/questions/50690564
复制相似问题