gpt4 book ai didi

mysql - on 子句中的未知列 {0}

转载 作者:行者123 更新时间:2023-11-29 06:23:15 25 4
gpt4 key购买 nike

我正在 MySQL 数据库上做一些工作,并完全被收到错误所困扰

1054 - Unknown column 'Puzzles.PuzzleID' in 'on clause'

表名和列名均存在且正确。我刚刚在 Navicat 的视觉设计器中创建了它。

SELECT
`PuzzleCategories`.`PuzzleCategory`,
`Clients`.`BusinessName`,
`Puzzles`.`PuzzleNumber`
FROM
`Puzzles`
Inner Join `PuzzleCategories` ON `Puzzles`.`PuzzleCategoryID` = `PuzzleCategories`.`PuzzleCategoryID` ,
`Clients`
Inner Join `Publications` ON `Clients`.`ClientID` = `Publications`.`ClientID`
Inner Join `PublicationIssues` ON `PublicationIssues`.`PublicationID` = `Publications`.`PublicationID`
Inner Join `PuzzleUsages` ON `PuzzleUsages`.`PuzzleID` = `Puzzles`.`PuzzleID` AND `PuzzleUsages`.`PublicationIssueID` = `PublicationIssues`.`PublicationIssueID`

最佳答案

我猜 Puzzles 没有列 PuzzleID。该表中的列是否简单地称为 ID?或者Puzzle_ID

您应该运行SHOW CREATE TABLE Puzzles来查看该表的当前定义。

有时缺少引用可能是罪魁祸首:

... ON `Puzzles.PuzzleID` ...

上面的代码将查找字面上名为“Puzzles.PuzzleID”的列,即 16 个字符长、中间有一个点的列名。


@Bell 值得获奖,因为他注意到您混合了逗号样式连接和 SQL-92 样式连接。我没注意到!

您不应在同一查询中同时使用两者,因为联接操作的优先级可能会导致困惑。

JOIN 关键字具有更高的优先级。简化您的查询,以便我们可以查看表表达式,它将按如下方式计算:

SELECT . . . 
FROM (Puzzles JOIN PuzzleCategories),
(Clients JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages)

问题在于,PuzzleUsages 的联接需要与 Puzzles.PuzzleID 列进行比较,但由于优先级问题,它不能进行比较。该列不是最后一个 JOIN 操作数的一部分。

您可以使用括号来解决错误,显式覆盖表表达式的优先级(就像在算术表达式中使用括号一样):

SELECT . . . 
FROM Puzzles JOIN (PuzzleCategories, Clients)
JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages

或者您可以一致地使用 SQL-92 JOIN 语法。我同意@Bell 的观点,这更清楚。

SELECT . . . 
FROM Puzzles JOIN PuzzleCategories JOIN Clients
JOIN Publications JOIN PublicationIssues JOIN PuzzleUsages

关于mysql - on 子句中的未知列 {0},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1753837/

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