当 `joined_table` 为空时,为什么 `FIELD(joined_table.column, NULL) = 0` 不匹配?
Why does `FIELD(joined_table.column, NULL) = 0` not match when the `joined_table` is empty?
FIELD(NULL, NULL) = 0
产生结果,FIELD(table.column_is_null, NULL) = 0
也产生结果,但如果要比较的字符串来自空连接 table 列:
SELECT t.id, FIELD(tj.id, NULL) AS field_zero
FROM task t
LEFT JOIN task tj ON FALSE
WHERE FIELD(tj.id, NULL) = 0
LIMIT 10
此查询不会产生任何结果,但如果我删除 WHERE
子句,field_zero
在所有 10 行中为零:
SELECT t.id, FIELD(tj.id, NULL) AS field_zero
FROM task t
LEFT JOIN task tj ON FALSE
LIMIT 10
根据文档,FIELD
“Returns 0 如果未找到 str。”(参见:MySQL 5.7 FIELD
documentation)
我在记录 FIELD
的网站上搜索了 FIELD
函数的错误以及特殊行为,但找不到任何提及该问题的信息。
这是已知错误吗?
还是我对(LEFT) JOIN
的行为有误解?
我强烈怀疑这是 mysql 中的未知错误。
当对空连接 table 中的非字符串使用 COALESCE
时,查询产生结果:
SELECT t.id, FIELD(tj.id, NULL) AS field_zero
FROM task t
LEFT JOIN task tj ON FALSE
WHERE FIELD(COALESCE(tj.id), NULL) = 0
LIMIT 10
FIELD(NULL, NULL) = 0
产生结果,FIELD(table.column_is_null, NULL) = 0
也产生结果,但如果要比较的字符串来自空连接 table 列:
SELECT t.id, FIELD(tj.id, NULL) AS field_zero
FROM task t
LEFT JOIN task tj ON FALSE
WHERE FIELD(tj.id, NULL) = 0
LIMIT 10
此查询不会产生任何结果,但如果我删除 WHERE
子句,field_zero
在所有 10 行中为零:
SELECT t.id, FIELD(tj.id, NULL) AS field_zero
FROM task t
LEFT JOIN task tj ON FALSE
LIMIT 10
根据文档,FIELD
“Returns 0 如果未找到 str。”(参见:MySQL 5.7 FIELD
documentation)
我在记录 FIELD
的网站上搜索了 FIELD
函数的错误以及特殊行为,但找不到任何提及该问题的信息。
这是已知错误吗?
还是我对(LEFT) JOIN
的行为有误解?
我强烈怀疑这是 mysql 中的未知错误。
当对空连接 table 中的非字符串使用 COALESCE
时,查询产生结果:
SELECT t.id, FIELD(tj.id, NULL) AS field_zero
FROM task t
LEFT JOIN task tj ON FALSE
WHERE FIELD(COALESCE(tj.id), NULL) = 0
LIMIT 10