当我运行以下查询时,我返回了两个具有重复结果的条目。当我在此处使用“ distinct”时,为什么会返回重复的结果?主键是门牌号,街道名称和单元号。
SELECT distinct
house_num,
Street_name,
Unit_Designator,
Unit_Num
FROM voterinfo.voter_info
WHERE house_num = 420
AND street_name = "PARK"
AND Unit_Num = ''
AND Unit_Designator = '';
答案 0 :(得分:4)
setInterval
是用于确保结果集没有重复的行的语句。也就是说,它会过滤出每一列都相同的行(并且select distinct
的值被认为是相等的)。
它不查看列的子集。
有时候,人们使用NULL
并没有意识到它适用于所有列。当第一列放在括号中时,这很有趣–好像括号会有所不同(它们没有)。
然后,您可能还会遇到值看起来相同但不相同的情况。
考虑以下简单示例,其中值的不同仅是字符串结尾的空格:
select distinct
Here是本示例的db <>小提琴。
这将返回两行,而不是1。
没有样本数据,很难说出您指的是哪种情况。但是您认为“相同”的行实际上不是。
答案 1 :(得分:0)
对于数据类型为Char或类似的字段(Street_name,Unit_Designator),可能存在通过应用适当的修整逻辑而在查询编辑器中不可见的要删除的空格。请参考以下链接,< / p>
MySQL select fields containing leading or trailing whitespace