我有一个旧版 MySQL 数据库 (3.x),我正在尝试运行一个查询,该查询返回特定列中的所有行,其中返回行的值不应存在于另一列中,来自另一列表。
我在这里搜索了所有类似的问题,并通过谷歌搜索了解决方案,但找不到执行此查询失败的原因。
第一个表(表程序)中的列名为“fkfileid”,我要检查的表(表导入)中的列名为“ifkfileid”。我的查询应该返回“programs.fkfileid”中在“imports.ifkfileid”中没有匹配值的所有行。
这是查询:
SELECT fkfileid FROM programs WHERE fkfileid NOT IN (SELECT ifkfileid FROM imports)
我必须使用“NOT IN”而不是“NOT EXISTS”,因为它是旧版 MySQl 数据库。我从数据库得到的错误如下:
“第 1 行 'SELECT ifkfileid FROM imports)' 附近的 SQL 语法有错误”
我的查询与此处类似帖子中显示的几个示例非常相似。我不知道我哪里做错了。
示例:SQL - find records from one table which don't exist in another
此外,我无法使用“JOIN”语句,因为此查询将被添加到一个更复杂的查询中,我不知道如何使其与“JOIN”一起使用。
我无意毫不费力地提出一个愚蠢的问题,但我无法弄清楚这个问题......
感谢您的帮助或见解,
最佳答案
尝试将语句分解为原子部分,并直接针对数据库单独测试它们:
例如确保“SELECT ifkfileid FROM Imports”返回一些数据并且不会导致错误。如果有效,请将整条线路插入并查看结果。通过使用“SELECT fkfileid FROMprograms WHERE fkfileid IN (...)”确保第一部分在语法上正确,并选择一个您知道存在的值。然后使用 NOT IN 等。
很可能存在一个简单的语法错误。我不确定 MySQL 是否对空格敏感,但我见过的所有 NOT IN 查询都有括号反对 IN 指令 - 例如不在(...并且不,不在(...
希望有帮助。
关于mysql - 旧版 MYSQL 3.x DB - 查询在不应失败时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34615426/