【问题标题】:Why does this SQL Query returns an error?为什么此 SQL 查询返回错误?
【发布时间】:2014-01-26 07:31:42
【问题描述】:

我正在使用子查询来访问 where 子句中的别名。 只要我只选择“MIN(r.price)”,它就可以正常工作。当我选择“*, ...”时,它会返回错误“...duplicate column id ...”。这是为什么?子查询本身运行良好。

这里是:

SELECT *
FROM
(
    SELECT *, MIN(r.price) as min_price
    FROM tl_frp_presentation as p
    INNER JOIN tl_frp_object as o
        ON p.objectID = o.id
    INNER JOIN tl_tag as c
        ON c.id = o.id
        AND c.from_table = "tl_frp_object"
    LEFT JOIN tl_frp_rooms as r
        ON r.pid = o.id
    WHERE p.type = "tl_frp_object"
    GROUP BY p.id
) as inner_t
WHERE min_price >= 100

感谢任何帮助!

【问题讨论】:

    标签: mysql sql select group-by having


    【解决方案1】:

    只需将 ALIAS 名称添加到列

    试试这个:

    SELECT *
    FROM (SELECT *, MIN(r.price) AS min_price 
          FROM tl_frp_presentation AS p
          INNER JOIN tl_frp_object AS o ON p.objectID = o.id
          INNER JOIN tl_tag AS c ON c.id = o.id AND c.from_table = "tl_frp_object"
          LEFT JOIN tl_frp_rooms AS r ON r.pid = o.id
          WHERE p.type = "tl_frp_object"
          GROUP BY p.id
         ) AS inner_t
    WHERE min_price >= 100;
    

    您也可以使用 HAVING 子句来满足您的要求,如下所示

    SELECT *, MIN(r.price) AS min_price 
    FROM tl_frp_presentation AS p
    INNER JOIN tl_frp_object AS o ON p.objectID = o.id
    INNER JOIN tl_tag AS c ON c.id = o.id AND c.from_table = "tl_frp_object"
    LEFT JOIN tl_frp_rooms AS r ON r.pid = o.id 
    WHERE p.type = "tl_frp_object"
    GROUP BY p.id HAVING min_price >= 100;
    

    【讨论】:

    • 谢谢!你的第二个代码太棒了..还不知道 HAVING 关键字。
    • @Yami 而不是使用SELECT *,只通过在查询的 SELECT 部分传递列名来获取特定的行
    • 我没有,因为在当前情况下我确实需要所有列。但感谢您的意见。
    【解决方案2】:

    你给子选择一个别名,这很好!

    使用它:-)

    ) as inner_t
    WHERE inner_t.min_price >= 100
    

    更好的是,您不需要将其包装到子选择中:

    SELECT *, MIN(r.price) as min_price
    FROM tl_frp_presentation as p
    INNER JOIN tl_frp_object as o
        ON p.objectID = o.id
    INNER JOIN tl_tag as c
        ON c.id = o.id
        AND c.from_table = "tl_frp_object"
    LEFT JOIN tl_frp_rooms as r
        ON r.pid = o.id
    WHERE p.type = "tl_frp_object"
    GROUP BY p.id
    HAVING min_price >= 100
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-21
      • 2015-11-26
      • 1970-01-01
      • 2021-12-24
      • 2020-01-30
      • 2021-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多