代码之家  ›  专栏  ›  技术社区  ›  Devin Dixon

使用Distinct with*

  •  1
  • Devin Dixon  · 技术社区  · 15 年前

    我在使用distinct with*时遇到问题。我有一个表作为连接,我试图做一个声明如下:

    SELECT DISTINCT Name, * FROM table_a JOIN table_a.id=table_b.id WHERE status=1
    

    但它不允许我这么做。是否有使用Distinct with*选项的方法?

    4 回复  |  直到 14 年前
        1
  •  1
  •   tvanfosson    15 年前

    我现在没有机会测试这个,但我怀疑问题不在于 distinct 而是在每个表中都有同名的列(比如 id )它不知道要选择哪两个冲突的列。如果你改变了它吗 select distinct table_a.*, table_b.* ... ?

        2
  •  1
  •   Ante    15 年前

    DISTINCT * 可能会返回所有行,因为它们是不同的:-)

    为了得到所有不同的名字 DISTINCT name 或者检索一些关于名字的统计数据(例如count),使用 SELECT name, COUNT(*) FROM ... GROUP BY name .

        3
  •  0
  •   fredt    15 年前

    不清楚你想做什么。

    也许您只想返回一个具有给定名称的列(而不是两个id列)。

    在本例中,标准SQL查询如下:

    SELECT * FROM table_a JOIN table_b USING (id) WHERE status=1
    

    关键字DISTINCT意味着在执行select之后,将消除重复的行(而不是重复的列名)。

        4
  •  0
  •   Dyin    14 年前

    基本上解决方案更像这样:

    SELECT *
    FROM table_a, table_b
    JOIN table_a.id = table_b.id
    WHERE status = 1
    GROUP BY table_a.name
    

    如果要避免枚举属性,则这很有用。当您这样做,并且关系发生更改(删除或添加一个属性)时,查询将不起作用。

    请阅读: MySQL 8.3.1.13. DISTINCT Optimization