【问题标题】:Is this a valid query? (Repetition of Aliases)这是一个有效的查询吗? (别名重复)
【发布时间】:2016-08-29 17:55:34
【问题描述】:

我正在尝试创建嵌套连接语句并将别名用于编程目的。让我给你一个我正在尝试加入的表及其外键的列表。

TABLE1: id (Foreign key)
TABLE2: id (primary key), idx (foreign key)
TABLE3: id (primary key), idx (primary key)
TABLE4: id (primary key), idx (primary key)`

SELECT * 
FROM (((TABLE1 JOIN
        TABLE2
        ON TABLE1.id = TABLE2.id
       ) AS NEW_TABLE JOIN
       TABLE3
       ON NEW_TABLE.id = TABLE3.id AND NEW_TABLE.idx = TABLE3.idx
      ) AS NEW_TABLE JOIN
      TABLE4
      ON NEW_TABLE.id = TABLE4.id AND
         NEW_TABLE.idx = TABLE4.idx
     );

你能告诉我这是否是一个有效的查询并且以这种方式使用别名有效吗?

【问题讨论】:

  • 您有正在使用的特定 DBMS 吗?

标签: sql sql-server select join alias


【解决方案1】:

我不这么认为。我会这样写:

SELECT * 
FROM TABLE1 JOIN
     TABLE2
     ON TABLE1.id = TABLE2.id JOIN
     TABLE3
     ON TABLE1.id = TABLE3.id AND TABLE2.idx = TABLE3.idx
     TABLE4
     ON TABLE1.id = TABLE4.id AND
        TABLE2.idx = TABLE4.idx;

(好吧,实际上,我会使用表别名,但这是我的想法。)

括号对你没有任何作用。我还认为重新使用 NEW_TABLE 别名可能会产生错误。

【讨论】:

    【解决方案2】:

    您可能需要嵌套完整的查询:

    SELECT * FROM 
      (SELECT * FROM 
        (SELECT * FROM TABLE1 JOIN TABLE2 ON TABLE1.id = TABLE2.id ) A 
        JOIN TABLE3 ON A.id = TABLE3.id AND A.idx = TABLE3.idx) B 
      JOIN TABLE4 ON B.id = TABLE4.id AND B.idx = TABLE4.idx;
    

    虽然,在不知道表格内容的情况下,很难说您可能会得到什么样的结果,或者您的查询是否有效。

    【讨论】:

      【解决方案3】:

      格式如下..

      SELECT * FROM 
        TABLE1 
           JOIN TABLE2 ON TABLE1.id = TABLE2.id
           JOIN TABLE3 ON Table1.id = TABLE3.id 
              AND Table2.idx = TABLE3.idx
         JOIN TABLE4 ON Table3.id = TABLE4.id 
            AND Table3.idx = TABLE4.idx
      

      【讨论】:

        猜你喜欢
        • 2012-11-17
        • 2021-08-20
        • 1970-01-01
        • 2012-08-23
        • 1970-01-01
        • 2011-07-23
        • 1970-01-01
        • 1970-01-01
        • 2011-11-27
        相关资源
        最近更新 更多