Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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
Django中排除重复项的查询_Django - Fatal编程技术网

Django中排除重复项的查询

Django中排除重复项的查询,django,Django,我正在使用QuerySet获取Django中的一些数据。 我最初的查询是Point.objects.order\u by('chron','pubdate') 在某些情况下,chron字段是重复的,因此我更改了查询 指向Point.objects.order_by('chron','pubdate')。distinct('chron')以排除重复项。 现在的问题是,所有空字段都被视为重复字段 准确地说,chron字段包含整数(其行为类似于ID),在某些情况下它可以是重复的,在某些情况下它可以是空

我正在使用QuerySet获取Django中的一些数据。
我最初的查询是
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

虽然这看起来效率很低,但我相信(我很高兴得到纠正)即使是任何合理的香草SQL语句(如下面的语句)也需要多个表扫描来连接空值和唯一值的结果集

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

虽然这看起来效率很低,但我相信(我很高兴得到纠正)即使是任何合理的香草SQL语句(如下面的语句)也需要多个表扫描来连接空值和唯一值的结果集

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()。