所以我有一张包含10条记录的表格。
SELECT * FROM Komponens WHERE fkod = "SO"
它给了我一张约5条记录的表格。但我希望没有那5条记录的结果。
例如:
fkod kkod
SU AA
SU AC
SA AB
CI AC
CI AA
fkod 是香料的名称(SU - 糖,SA - 盐,CI - 肉桂), kkod 是香料混合物的名称。我没糖了,我想展示我可以创造的混合物,因为它们不需要糖(在这种情况下只是SA
- AB
)
如果我使用SELECT * FROM Komponens WHERE fkod != "SU"
,我会获得AB,AC和AA。
如何在SQL中解决它?
答案 0 :(得分:4)
SELECT * FROM Komponens WHERE (fkod <>"SO") or (fkod is null)
给出补充说明,acatt的答案是正确的,用fkod = SU识别kkod,然后识别kkod在该集合之外的行。
我能想到编写SQL的唯一方法是:
SELECT k.*
FROM Komponens k left outer join
(select kkod from Komponens WHERE fkod = "SU" group by kkod) l
on k.kkod = l.kkod
where l.kkod is null
答案 1 :(得分:2)
修改使用新逻辑。请试试这个:
SELECT *
FROM Komponens
WHERE kkod NOT IN (
SELECT kkod
FROM Komponens
WHERE fkod = "SU"
)
答案 2 :(得分:1)
我不确定这是否适用于Access但
SELECT * FROM Komponens WHERE fkod = "SU"
SELECT * FROM Komponens WHERE fkod != "SU"
给你那些含糖和没有糖的人,所以......
SELECT * FROM Komponens WHERE fkod != "SU"
AND kkod NOT IN (SELECT * FROM Komponens WHERE fkod = "SU")
我没有测试它,但它应该让你走上正确的路线。
祝你好运答案 3 :(得分:1)
你有一张表每个混合物包含一个记录吗?您的数据库似乎遗漏了这一点。尽管如此,您仍然可以解决您的问题:
SELECT * FROM Komponens K1 WHERE NOT EXISTS
(SELECT * FROM Komponens K2 WHERE K2.kkod = K1.kkod AND K2.fkod = 'SA')
或
SELECT * FROM Komponens K1 WHERE kkod NOT IN
(SELECT kkod FROM Komponens WHERE fkod = 'SA')
这些将为您提供混合物和所有香料成分,您可以制作不含糖的混合物。如果您只想要混合物列表,而不是每种混合物都有多行,请将SELECT *
更改为SELECT DISTINCT kkod
。