我正在尝试找出如何拉回“字段A”和“字段B”不能为集合组合的记录。
示例:字段A不能等于“预定”,而字段B等于“预定”
但是我确实想查看其他记录,其中字段A =“计划的”和字段B =“预计划的”
我希望这是有道理的,请参见下面的脚本,我包括一个非常基本的临时表,其中包含要尝试实现的示例,使用CONCAT可以解决此问题,但我认为这不是最好的解决方案?
我知道我可以通过执行不存在的操作来排除这些错误,但是在实际数据库中,这将是一个大表,并且我不希望对此进行重复查询。
我也有解决方法,但我想知道是否有适当/更好的方法来完成此任务。
请查看代码和注释。
class SubSubjectListSerializer(serializers.ModelSerializer):
topics = serializers.SerializerMethodField()
sub_subject_id = serializers.CharField(source='id')
class Meta:
model = Subsubject
fields = [
'sub_subject_id',
'title',
'slug',
'topics'
]
def get_topics(self, obj):
qs = obj.topics.all().order_by('id')
return TopicListSerializer(qs, many=True, read_only=True).data
class SubjectDetailSerializer(serializers.ModelSerializer):
sub_subjects = serializers.SerializerMethodField()
class Meta:
model = Subject
fields = [
'id',
'title',
'short_name',
'icon_file',
'contents',
'slug',
'image',
'is_block',
'status',
'created_on',
'created_by',
'updated_on',
'updated_by',
'meta_description',
'meta_keywords',
'head_script',
'sub_subjects',
]
def get_sub_subjects(self, obj):
return SubSubjectListSerializer(obj.sub_subjects.exclude(title='Others')
many=True).data
-我希望这会返回(C)点的结果,但要记住(D)。
答案 0 :(得分:2)
您可以尝试使用OR
代替AND
SELECT *
FROM [#Temp]
WHERE ([status] <> 'Scheduled' or [fkStatus] <> 'PreliminaryScheduled')
答案 1 :(得分:1)
使用NOT
取消您不希望满足的条件:
SELECT * FROM #temp
WHERE NOT ([status] = 'Scheduled' AND [fkStatus] = 'PreliminaryScheduled')
或者,使用OR
:
SELECT * FROM #temp
WHERE [status] <> 'Scheduled' OR [fkStatus] <> 'PreliminaryScheduled'
它们都产生相同的查询计划(使用OR),您可能会发现第一个查询更清晰。
答案 2 :(得分:1)
您可以使用NOT语句。
SELECT * FROM [#Temp]
WHERE [Date] < '2019-01-01'
AND NOT ([status] = 'Scheduled' AND [fkStatus] = 'PreliminaryScheduled')