我试图了解一些SQL语句的工作原理。正确知道我正在调查GROUP BY
并想知道,它如何选择显示/返回重复数据的内容。
考虑以下示例:
CREATE TABLE customers
(
FirstName VARCHAR(50),
LastName VARCHAR(50),
MobileNo VARCHAR(15)
);
INSERT INTO customers VALUES ('Niraj','Yadav',989898);
INSERT INTO customers VALUES ('Chetan','Gadodia',959595);
INSERT INTO customers VALUES ('Chetan','Gadodia',959590);
INSERT INTO customers VALUES ('Atul','Kokam',42424242);
INSERT INTO customers VALUES ('Atul','Kokam',42424246);
INSERT INTO customers VALUES ('Vishal','Parte',9394452);
INSERT INTO customers VALUES ('Vishal','Parte',939445);
INSERT INTO customers VALUES ('Vishal','Parte',9394451);
INSERT INTO customers VALUES ('Jinendra','Jain',12121);
INSERT INTO customers VALUES ('Jinendra','Jain',121212);
如果我运行此查询...
SELECT *
FROM customers
GROUP BY FirstName;
我得到以下结果:
FirstName LastName MobileNo
--------- -------- ----------
Atul Kokam 42424242
Chetan Gadodia 959595
Jinendra Jain 12121
Niraj Yadav 989898
Vishal Parte 9394452
所以,我的问题是:它有什么理由返回这些特定记录吗?它如何确定要获得什么?我正在使用MySQL。
答案 0 :(得分:4)
在其他数据库中,不会完全允许您的查询,因为在这种情况下结果是不可预测的。
注意MySQL文档对于这种情况的说法:
服务器可以自由选择每个组中的任何值,因此除非它们相同,否则所选的值为 indeterminate 。
我还应该提一下,Gordon Linoff最近向我指出,从MySQL的5.7版本开始,默认情况下将不再允许像你这样的查询,其中可能出现不可预测的结果。
有关信息:MySQL 5.7: only_full_group_by Improved, Recognizing Functional Dependencies, Enabled by Default!