SQL:无效列名适用于一个查询,但不适用于另一个查询



我可以在一个查询中获得'Name'列,但当与另一个查询组合时,我会得到一个"无效的列名"输出

select Name
from Tb_Product;

在这里,我得到了产品"Name"的预期输出,一切都很好。。。

select City, Name
FROM Tb_Supplier Stbl, Tb_Product Ptbl
WHERE Stbl.City = 'Chicago' 

但是,此处的"名称"列无效。。。

尝试完全指定名称:

select City, Ptbl.Name
FROM Tb_Supplier Stbl, Tb_Product Ptbl
WHERE Stbl.City = 'Chicago'

此外,供应商和产品之间没有连接条件。。。这个查询可能不会给您预期的结果。

另一个可能的问题是名称保留关键字:https://dev.mysql.com/doc/refman/8.0/en/keywords.html#keywords-8-0-尾-N

DBMS或编程语言有保留的关键字,在命名对象时应避免使用这些关键字。它们可能仍然有效,但会产生意外的结果,或者产生不太容易调试的令人困惑的错误消息。

可以通过Randy建议的用表前缀限定列名,或者将列名括在括号([](之间来解决这个问题。但最好避免使用过于通用的对象名称,因为有时您可能会偶然发现保留的关键字。如果有疑问,请查看列表。完整阅读并添加书签:(

不过,这个问题的标签并不一致,因为它们同时提到了SQL Server和MySQL,除非你真的同时使用这两者。保留关键字的列表因平台而异。

相关内容

最新更新