定义列和表时列未知?

  • 本文关键字:未知 定义 mysql sql
  • 更新时间 :
  • 英文 :


我偶然发现了这个例子:

SELECT SupplierName
FROM Suppliers
WHERE EXISTS (SELECT ProductName FROM Products WHERE Products.SupplierID = Suppliers.supplierID );

它可以毫无问题地工作并显示请求的行,但是当我尝试将子查询作为这样的查询运行时

SELECT ProductName FROM Products WHERE Products.SupplierID = Suppliers.supplierID ;

它告诉我供应商供应商ID是一个未知列,我错过了什么?

您认为查询是:

SELECT s.SupplierName
FROM Suppliers s
WHERE EXISTS (SELECT p.ProductName
FROM Products p
WHERE p.SupplierID = s.supplierID
);

但是,如果p.ProductName不存在,则SQL会访问外部查询,并将其解释为:

SELECT s.SupplierName
FROM Suppliers s
WHERE EXISTS (SELECT s.ProductName
FROM Products p
WHERE p.SupplierID = s.supplierID
);

在这种情况下,它没有任何区别,因为EXISTS只检查的存在,而不是。 我通常用SELECT 1写这个。

也就是说,它可以在其他情况下产生影响。 因此,道德仍然适用:

Moral:始终限定所有列引用,尤其是在具有多个表引用的查询中。

最新更新