Mysql 可以重写DISTINCT(或失去其特殊权限)

Mysql 可以重写DISTINCT(或失去其特殊权限),mysql,Mysql,此查询提供了639条记录 SELECT DISTINCT lnk.lnk_ID, dmg.dmg_Sex, dlk.scot_Type FROM DAILY_LINK dlk JOIN Link lnk ON lnk.lnk_ID = dlk.dlk_lnkID JOIN Demographic dmg ON dmg.dmg_ID = lnk.lnk_dmgID WHERE dlk.dlk_AssessDate >= '01/01/2015' AND dlk.dl

此查询提供了639条记录

SELECT  DISTINCT lnk.lnk_ID, dmg.dmg_Sex, dlk.scot_Type
FROM    DAILY_LINK dlk
JOIN    Link lnk ON lnk.lnk_ID = dlk.dlk_lnkID
JOIN    Demographic dmg ON dmg.dmg_ID = lnk.lnk_dmgID 
WHERE   dlk.dlk_AssessDate >= '01/01/2015' AND dlk.dlk_AssessDate <= '01/01/2016' 
AND     dlk.scot_Type = 'Enquiry'
ORDER BY lnk.lnk_ID
这怎么可能。在第二个查询中似乎没有使用
DISTINCT
,因为实际上有一些
lnk.lnk\u ID
具有双条目


对不起,我不能写一个结构。

这有什么让人困惑的

您添加了一列,并获得了另外5行

这意味着
lnk.lnk\u ID、dmg.dmg\u Sex、dlk.scot\u Type
的一个或多个组合具有多个区域。这似乎是显而易见的

您可以很容易地看到他们正在使用的
分组方式

SELECT lnk.lnk_ID, dmg.dmg_Sex, dlk.scot_Type,
       GROUP_CONCAT(DISTINCT dlk.enq_region) as enq_regions
FROM DAILY_LINK dlk JOIN
     Link lnk
     ON lnk.lnk_ID = dlk.dlk_lnkID JOIN
     Demographic dmg
     ON dmg.dmg_ID = lnk.lnk_dmgID 
WHERE dlk.dlk_AssessDate >= '2015-01-101' AND dlk.dlk_AssessDate <= '2016-01-01' AND
      dlk.scot_Type = 'Enquiry'
GROUP BY lnk.lnk_ID, dmg.dmg_Sex, dlk.scot_Type
HAVING COUNT(DISTINCT dlk.enq_region) > 1;
选择lnk.lnk\U ID、dmg.dmg\U性别、dlk.scot\U类型,
组CONCAT(不同的dlk.enq_区域)作为enq_区域
从每日链接dlk加入
链接lnk
关于lnk.lnk_ID=dlk.dlk_lnkID JOIN
人口统计学
在dmg.dmg_ID=lnk.lnk_dmgID上
其中dlk.dlk_assessment date>='2015-01-101'和dlk.dlk_assessment date 1;

显示您的数据示例。请记住,整行都使用distinct。显然你的一些行与不同的lnk连接_IDs@Gonzalo.-我听到你在说什么,但是我附加的字段不是索引字段,所以它不应该以任何方式改变链接,但是我得到了这个结果。在这里获取一些数据是很困难的,但我会try@Gonzalo.-事实上。。。该字段
dlk.scot_Type
确实已编制索引。那么,这可能会导致问题的出现。嗯,不,不会。这是一个完全相同的双重输入,相同的身份证,相同的性别,相同的地区。@morne Gordon的回答是合理的-这很可能是你的问题的原因。但是,我认为您正在寻找一个GROUPBY子句(见下文)。好的,谢谢。我只是有一个稍微不同的问题。这是一个4D数据库,它是他们使用的mySQL的缩小版。似乎
GROUP\u CONCAT
不是该缩小版本的一部分。我在查询中包含它时出错。@morne。删除
组\u concat
,只关注返回的列中的值。然后您可以手动查找它们。
SELECT lnk.lnk_ID, dmg.dmg_Sex, dlk.scot_Type,
       GROUP_CONCAT(DISTINCT dlk.enq_region) as enq_regions
FROM DAILY_LINK dlk JOIN
     Link lnk
     ON lnk.lnk_ID = dlk.dlk_lnkID JOIN
     Demographic dmg
     ON dmg.dmg_ID = lnk.lnk_dmgID 
WHERE dlk.dlk_AssessDate >= '2015-01-101' AND dlk.dlk_AssessDate <= '2016-01-01' AND
      dlk.scot_Type = 'Enquiry'
GROUP BY lnk.lnk_ID, dmg.dmg_Sex, dlk.scot_Type
HAVING COUNT(DISTINCT dlk.enq_region) > 1;