SQL字段名称与别名

时间:2018-01-28 18:15:41

标签: sql ms-access

我一直试图找出以下SQL的工作原理

SELECT c_Supplier.Supplier_ID AS A_ID, c_Supplier.Name, c_Supplier.RFC, c_Supplier_Direccion.Description, c_Supplier_Direccion.Address, c_Supplier_Phone.Phone
FROM c_Supplier LEFT JOIN (c_Supplier_Direccion LEFT JOIN c_Supplier_Phone ON c_Supplier_Direccion.Supplier_Direccion_ID = c_Supplier_Phone.Supplier_Direccion_ID) ON c_Supplier.Supplier_ID = c_Supplier_Direccion.Supplier_ID
WHERE (c_Supplier.Supplier_ID=1);

但是当我尝试在A_ID子句中使用别名(WHERE)时,我收到了错误

SELECT c_Supplier.Supplier_ID AS A_ID, c_Supplier.Name, c_Supplier.RFC, c_Supplier_Direccion.Description, c_Supplier_Direccion.Address, c_Supplier_Phone.Phone
FROM c_Supplier LEFT JOIN (c_Supplier_Direccion LEFT JOIN c_Supplier_Phone ON c_Supplier_Direccion.Supplier_Direccion_ID = c_Supplier_Phone.Supplier_Direccion_ID) ON c_Supplier.Supplier_ID = c_Supplier_Direccion.Supplier_ID
WHERE (A_ID=1);

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我不明白你的问题。这是一个合理形成的SQL查询:

SELECT c_Supplier.Supplier_ID AS Entidad_ID, c_Supplier.Name,
       c_Supplier.RFC, c_Supplier_Direccion.Description,
       c_Supplier_Direccion.Address, c_Supplier_Phone.Phone
FROM c_Supplier LEFT JOIN
     (c_Supplier_Direccion LEFT JOIN
      c_Supplier_Phone
      ON c_Supplier_Direccion.Supplier_Direccion_ID = c_Supplier_Phone.Supplier_Direccion_ID
     ) ON c_Supplier.Supplier_ID = c_Supplier_Direccion.Supplier_ID
WHERE (c_Supplier.Supplier_ID = 1);

(为了便于阅读,我建议使用表别名,但这是一个单独的问题。)

在查询中的任何位置都没有名为A_ID的别名,因此没有理由期望对A_ID的引用起作用(除非它是其中一个表中的列)。 / p>

并且,SQL不允许在定义它们的SELECTWHERE子句中重用表别名。这不是MS Access限制;它是如何定义SQL语言的。

如果要在MS Access中执行此操作,可以使用子查询并在外部查询中引用表别名。