无法获得独特的价值观

Rol*_*and 3 mysql sql

我正在使用我的SQL从数据库中获取唯一值

我的查询如下所示,但不知怎的,我无法获得独特的结果

                    SELECT
            DISTINCT(company_name),
            sp_id               
        FROM
            Student_Training
        ORDER BY
            company_name
Run Code Online (Sandbox Code Playgroud)

sp_id是主键,然后company_name是需要唯一的公司名称

看起来如下

sp_id, company_name
1      comp1
2      comp2
3      comp2
4      comp3
Run Code Online (Sandbox Code Playgroud)

只是不排序这个独特的

Art*_*uer 7

DISTINCT在您选择的所有列上全局工作.在这里你得到不同的(sp_id的,COMPANY_NAME)的值,但每一列的各个值可能会出现重复.

话虽如此,MySQL SELECT DISTINCT(company_name), sp_id真正意味着授权语法是非常具有欺骗性的SELECT DISTINCT(company_name, sp_id).顺便说一句,你根本不需要括号.

编辑

实际上有一个原因DISTINCT(company_name), sp_id是为什么有效的语法:在表达式周围添加括号总是合法的,尽管它可能是过度的:company_name是相同的(company_name)甚至是相同的(((company_name))).因此,这段SQL意味着什么:"DISTINCT [括号中的company_name],[sp_id]".括号附加到列名称,而不是DISTINCT关键字,与聚合函数名称不同,例如,不需要括号(AVG sp_id即使对于人类读者来说是明确的,也是不合法的,它始终是 AVG(sp_id).)

就此而言,您可以编写SELECT DISTINCT company_name, (sp_id)或者SELECT DISTINCT (company_name), (sp_id),它与没有括号的普通语法完全相同.将列列表放在括号内 - (company_name, sp_id)- 不是合法的SQL语法,但是,你只能选择"普通"列列表,不加表示(表单的拼写检查器告诉我这最后一个表达式不是英文单词,但我不是照顾.毕竟是星期五下午).

因此,任何数据库引擎都应该接受这种令人困惑的语法:-(


Yan*_*ton 6

DISTINCT 将创建唯一的行,这意味着查询中字段值的唯一组合.

以下查询将返回所有唯一company_name的列表以及sp_id的第一个匹配项.

SELECT sp_id, company_name
FROM Student_Training
GROUP BY company_name
Run Code Online (Sandbox Code Playgroud)

正如Arthur Reutenauer所暗示的那样,MySQL DISTINCT(fieldname)在实际意义上允许语法确实是非常具有欺骗性的DISTINCT(field1, field2, ..., fieldn)