Django中排除重复项的查询
我正在使用QuerySet获取Django中的一些数据。Django中排除重复项的查询,django,Django,我正在使用QuerySet获取Django中的一些数据。 我最初的查询是Point.objects.order\u by('chron','pubdate') 在某些情况下,chron字段是重复的,因此我更改了查询 指向Point.objects.order_by('chron','pubdate')。distinct('chron')以排除重复项。 现在的问题是,所有空字段都被视为重复字段 准确地说,chron字段包含整数(其行为类似于ID),在某些情况下它可以是重复的,在某些情况下它可以是空
我最初的查询是
Point.objects.order\u by('chron','pubdate')
在某些情况下,
chron
字段是重复的,因此我更改了查询
指向Point.objects.order_by('chron','pubdate')。distinct('chron')
以排除重复项。
现在的问题是,所有空字段都被视为重复字段
准确地说,chron
字段包含整数(其行为类似于ID),在某些情况下它可以是重复的,在某些情况下它可以是空的
| chron |
|-------|
| 1 | I want this
| 2 | I want this
| 3 | I want this
| 3 |
| NULL |
| 4 | I want this
| NULL |
我想排除所有chron
重复项,但如果它们是NULL的重复项,则不排除。
谢谢。使用两个单独的查询
.distinct(“chron”).exclude(chron\u isnull=True)
仅用于.filter()
值,其中chron
chron\uu isnull=True
SELECT *
FROM (
SELECT chron
FROM Point
WHERE chron IS NOT NULL # .exclude()
GROUP BY chron # .distinct()
UNION ALL
SELECT chron
FROM Point
WHERE chron IS NULL # .include()
)
使用两个单独的查询
.distinct(“chron”).exclude(chron\u isnull=True)
仅用于.filter()
值,其中chron
chron\uu isnull=True
SELECT *
FROM (
SELECT chron
FROM Point
WHERE chron IS NOT NULL # .exclude()
GROUP BY chron # .distinct()
UNION ALL
SELECT chron
FROM Point
WHERE chron IS NULL # .include()
)
检查这个。然后执行排除以筛选空结果。检查此项。然后排除以过滤空结果。为什么要按
分组而不是选择不同的?谢谢,它做了一些调整:chron\u isnull
而不是chron\u isnull
,我想这是因为chron
是一个整型字段。我会用正确的语法更新答案。一定要把你的问题标记为已回答。@SardorbekImomaliev我研究过这个问题,因为我最初是出于习惯。根据这里的答案()在按非索引列分组时,最好使用DISTINCT。为什么要使用GROUP by
而不是SELECT DISTINCT
?谢谢,它进行了一些调整:chron\uu isnull
而不是chron\uu is\u null
,我想是因为chron
是一个IntegerField
。我会用正确的语法更新答案。一定要把你的问题标记为已回答。@SardorbekImomaliev我研究过这个问题,因为我最初是出于习惯。根据这个答案,在按非索引列进行分组时,最好使用DISTINCT()。