gpt4 book ai didi

mysql - 选择 none in set

转载 作者:行者123 更新时间:2023-11-30 22:34:21 25 4
gpt4 key购买 nike

我有两个表:

Invariant (UniqueID, characteristic1, characteristic2)
Variant (VariantID, UniqueID, specification1, specification2)

每个项目在实现之间都有自己不变的特征。每个实现也有自己的属性。

因此,我使用这样的查询来查找具有给定特征和规范的项目:

SELECT * 
FROM `Invariants`
LEFT JOIN (`Variants`) ON (`Variants`.`UniqueID`=`Invariants`.`UniqueID`)
WHERE char2='y' and spec1='x'
GROUP BY `Invariant`.`UniqueID`;

我正在寻找一个查询,该查询将返回所有从未满足给定规范的项目。所以,如果项目 100 的变体之一有 spec1='bad' , 然后我不希望项目 100 被包括在内,不管它是否有 spec1='good' 的变体.

最佳答案

select *
from Invariants iv
where not exists (
select 1
from Variants v
where v.UniqueId = iv.UniqueId and v.spec1 = 'bad'
)

下面的查询没有解决您的问题,我可能读得很快并且认为您只想获取特定类型的不变属性。但我会注意到,您不应该在 where 子句中使用左连接然后过滤右表中的列(检查空值除外)。人们总是会犯这样的错误,我第一眼就想到了这一点。

左联接的全部目的是某些行将不匹配,因此右侧表的列中将填充空值。此连接逻辑首先发生,然后在应用 where 子句之后发生。当您遇到类似 where spec1 = 'x' 的条件时,它总是会针对 null 值评估为 false。所以你最终删除了所有你想保留的行。

对于这些不变/自定义值表,这种情况经常发生。您只对其中一个属性感兴趣,但如果您在加入之前或在加入条件内不进行过滤,您最终会删除行,因为该值不存在并且您没有留下可比较一次的值它试图在属性名称上应用 where 子句条件。

希望这是有道理的。请参阅下面的示例:

select iv.UniqueId, ...
from
Invariants iv left outer join
Variants
on v.UniqueId = vi.UniqueId and v.spec1 = 'x'

select iv.UniqueId, ...
from
Invariants iv left outer join
(
select
from Variants
where spec1 = 'x'
) v
on v.UniqueId = vi.UniqueId

关于mysql - 选择 none in set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33022179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com