Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL DISTINCT在SELECT中被忽略显示重复_Mysql_Sql - Fatal编程技术网

MySQL DISTINCT在SELECT中被忽略显示重复

MySQL DISTINCT在SELECT中被忽略显示重复,mysql,sql,Mysql,Sql,我有下面的查询,它连接了3个表,但显示了重复的结果,其中我通过在r.Email列上使用DISTINCT只显示了记录的一个实例 SELECT DISTINCT FirstName, LastName, r.Email, ListingID, ListingFirmID FROM sancap_Residential_Property e JOIN sancap_Agent r ON e.ListingAgentID=r.AgentID JOIN sancap_Office

我有下面的查询,它连接了3个表,但显示了重复的结果,其中我通过在r.Email列上使用DISTINCT只显示了记录的一个实例

SELECT DISTINCT FirstName, LastName, r.Email, ListingID, ListingFirmID
    FROM sancap_Residential_Property e 
    JOIN sancap_Agent r ON e.ListingAgentID=r.AgentID
    JOIN sancap_Office d ON e.ListingFirmID=d.firmID
    WHERE ListingFirmID != 'BrokerC'
数据看起来是这样的,ListingID信息是唯一的,这就是为什么我认为查询显示的是代理ID。我如何克服这个问题

Buck      |     Rogers     |     buck@rogers.com     |     656565      |      BrokerAA
Buck      |     Rogers     |     buck@rogers.com     |     787878      |      BrokerAA
Pamm      |     Feeets     |     pamm@feeets.com     |     999999      |      BrokerBB
我想要的结果是:

Buck      |     Rogers     |     buck@rogers.com     |     656565      |      BrokerAA
Pamm      |     Feeets     |     pamm@feeets.com     |     999999      |      BrokerBB
像这样试试

SELECT FirstName, LastName, r.Email, ListingID, ListingFirmID
    FROM sancap_Residential_Property e 
    JOIN sancap_Agent r ON e.ListingAgentID=r.AgentID
    JOIN sancap_Office d ON e.ListingFirmID=d.firmID
    WHERE ListingFirmID != 'BrokerC'
group by FirstName, LastName, r.Email,ListingFirmID
像这样试试

SELECT FirstName, LastName, r.Email, ListingID, ListingFirmID
    FROM sancap_Residential_Property e 
    JOIN sancap_Agent r ON e.ListingAgentID=r.AgentID
    JOIN sancap_Office d ON e.ListingFirmID=d.firmID
    WHERE ListingFirmID != 'BrokerC'
group by FirstName, LastName, r.Email,ListingFirmID

最好尝试
分组方式
min()
函数

SELECT FirstName, LastName, r.Email, min(ListingID) as ListingID, ListingFirmID
    FROM sancap_Residential_Property e 
    JOIN sancap_Agent r ON e.ListingAgentID = r.AgentID
    JOIN sancap_Office d ON e.ListingFirmID = d.firmID
    WHERE ListingFirmID != 'BrokerC'
GROUP BY FirstName, LastName, r.Email, ListingFirmID

通过以上查询,您将得到
FirstName、LastName、r.Email、ListingFirmID
以及
ListingID
的最小值的不同组合,最好尝试
分组方式和
min()
函数

SELECT FirstName, LastName, r.Email, min(ListingID) as ListingID, ListingFirmID
    FROM sancap_Residential_Property e 
    JOIN sancap_Agent r ON e.ListingAgentID = r.AgentID
    JOIN sancap_Office d ON e.ListingFirmID = d.firmID
    WHERE ListingFirmID != 'BrokerC'
GROUP BY FirstName, LastName, r.Email, ListingFirmID

通过以上查询,您将得到
FirstName、LastName、r.Email、ListingFirmID
以及
ListingID

的不同组合,并且结果应该是?r.AgentID的
分组是否有效?更新以显示所需结果。对非常感谢乔,我会去读更多关于小组的内容。谢谢
DISTINCT
适用于结果的所有列。关于这个规则,你的结果没有重复。仅按单个列进行分组是无效的SQL,每隔一个DBMS将拒绝该SQL。您应该意识到后果:并且结果应该是?r.AgentID对
groupbyr.AgentID
work?进行更新以显示所需的结果。对非常感谢乔,我会去读更多关于小组的内容。谢谢
DISTINCT
适用于结果的所有列。关于这个规则,你的结果没有重复。仅按单个列进行分组是无效的SQL,每隔一个DBMS将拒绝该SQL。你应该意识到后果:如果只有电子邮件是不同的(据我所知),那么在
groupby
子句中保留
r.email
就足够了,这将加快分组速度。嗯?请记住,这将从组返回一个未确定的
ListingID
@Kleskowy,是的,但是出于这个原因,可以认为最好按列出组中的所有非聚合列(我怀疑这会大大加快分组速度)。我更喜欢Ambrish的答案,但导致这些问题的数据结构明显缺乏规范化。如果只有电子邮件是不同的(据我所知),那么在
GROUP BY
子句中保留
r.email
就足够了,这将加快分组速度。嗯?请记住,这将从组返回一个未确定的
ListingID
@Kleskowy,是的,但是出于这个原因,可以认为最好按列出组中的所有非聚合列(我怀疑这会大大加快分组速度)。我更喜欢Ambrish的答案,但数据结构明显缺乏规范化,这导致了这些问题。