嵌套连接隐藏表名

4

我有三个表:供应商(Suppliers)、零件(Parts)和类型(Types)。我需要将它们全部连接起来,同时区分这三个表中具有相同名称的列(例如,“id”列)。我希望能够成功地运行以下查询:

CREATE VIEW Everything AS
SELECT Suppliers.name as supplier, 
       Parts.id, 
       Parts.description, 
       Types.typedesc as type
FROM Suppliers JOIN (Parts JOIN Types ON Parts.type_id = Types.id)
ON Suppliers.id = Parts.supplier_id;

我的数据库管理系统(sqlite)提示“没有这样的列(Parts.id)”。我猜测一旦JOIN完成,它就会忘记表名,但是我该如何引用属于表Parts的列id

2个回答

6
您的 ANSI-92 JOIN 语法不正确 - 请使用以下语法:
CREATE VIEW Everything AS
  SELECT Suppliers.name as supplier, 
         Parts.id, 
         Parts.description, 
         Types.typedesc as type
    FROM Suppliers 
    JOIN Parts ON Suppliers.id = Parts.supplier_id
    JOIN Types ON Parts.type_id = Types.id

0
只要您根据表别名.字段名称对连接进行限定,您就不会遇到问题...例如。
CREATE VIEW Everything AS 
      SELECT 
            Suppliers.name as supplier, 
            Parts.id, 
            Parts.description, 
            Types.typedesc as type 
         FROM 
            Suppliers,
            Parts,
            Types
         WHERE
                Supplier.ID = Parts.Supplier_ID
            AND Parts.Type_ID = Types.ID
         ORDER BY
            (whatever columns)

Ick,隐式连接,请不要鼓励人们使用这种糟糕的编程技术。 - HLGEM
+1:ANSI-89连接语法是有效的,只是不被推荐使用(主要是因为没有标准的OUTER JOIN语法)。更多信息请参见:https://dev59.com/R3E95IYBdhLWcg3wlvCz - OMG Ponies

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接