【问题标题】:Exclude records with SQL使用 SQL 排除记录
【发布时间】:2012-10-02 13:48:15
【问题描述】:

所以我有一个有 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 中解决?

【问题讨论】:

  • 我不确定我是否理解 - 请您澄清一下。您的意思是要排除这 5 条记录吗?
  • 对不起,我编辑了问题:)
  • 当你说'fkod = "SO"时,你的意思是'fkod = "SU"'吗?

标签: sql ms-access


【解决方案1】:
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

【讨论】:

    【解决方案2】:

    修改以使用新逻辑。请试试这个:

    SELECT * 
    FROM Komponens
    WHERE kkod NOT IN (
        SELECT kkod
        FROM Komponens
        WHERE fkod = "SU"
    )
    

    【讨论】:

    • 呃,这是我的错,对不起。这不是我的问题。例如:fkod kkod SU AA SU AC SA AB CI AC CI AA fkod 是香料的名称(SU - 糖,SA - 盐,CI - 肉桂) kkod 是香料混合物的名称。我没有糖了,我想展示我可以制作的混合物,因为它们不需要糖 (AB)。如果我使用 SELECT * FROM Komponens WHERE fkod != "SU" 我得到 AB、AC 和 AA。所以这是我的问题。非常抱歉:S
    • @mitya 我不确定我是否完全理解你想要做什么。你能在表格中发布一个数据样本吗?
    • @mitya 我已经检查了你修改后的问题,我想我理解你想要做什么,我已经修改了我原来的答案。
    【解决方案3】:

    我不确定这是否适用于 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")
    

    我没有测试过它,但它应该能让你在正确的路线上。

    祝你好运

    【讨论】:

      【解决方案4】:

      您是否有一个表格,其中包含每种混合物的一条记录?这似乎从您的数据库中丢失。尽管如此,您仍然可以解决您的问题:

       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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-26
        • 2013-05-31
        • 2015-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多