【问题标题】:select if not a count如果不是计数则选择
【发布时间】:2014-10-24 10:14:13
【问题描述】:

我有 3 个表 Product、sku 和 option

产品

 ID                                            FlatID    Name
 314E5E5E-0A7E-4DC5-872C-16DA8DA36439          0706      Jacket

SKU

ID                                           productID                              QTY
6CFE849A-4856-43E8-9837-3B1D1122A701         314E5E5E-0A7E-4DC5-872C-16DA8DA36439     1
F76C9B5B-CEB5-44FE-AD27-69C4A3C124AE         314E5E5E-0A7E-4DC5-872C-16DA8DA36439     1
BB413DE8-E310-4393-95E9-8262D6EE515A         314E5E5E-0A7E-4DC5-872C-16DA8DA36439     1
866CD899-F25F-4C4D-9E56-A4A95A7BDC5D         314E5E5E-0A7E-4DC5-872C-16DA8DA36439     1

选项

skuid                                    OptionID                                 name    
6CFE849A-4856-43E8-9837-3B1D1122A701     1C823E53-EE98-4B22-8118-287BCA55C4D8       BK           
6CFE849A-4856-43E8-9837-3B1D1122A701     6D7168A0-775A-4C5B-B8E8-8CE3AF8A8665       LG           
F76C9B5B-CEB5-44FE-AD27-69C4A3C124AE     1C823E53-EE98-4B22-8118-287BCA55C4D8      BK           
F76C9B5B-CEB5-44FE-AD27-69C4A3C124AE     F6A0974C-303D-4C6A-8CE1-39071C7DF566      MD         
BB413DE8-E310-4393-95E9-8262D6EE515A     FB4D7BC1-6C71-4E00-8C85-0DE93DC1C531       SM         
BB413DE8-E310-4393-95E9-8262D6EE515A     1C823E53-EE98-4B22-8118-287BCA55C4D8      BK           
866CD899-F25F-4C4D-9E56-A4A95A7BDC5D     F6E0FB61-047E-4356-B085-630B38CBC7F2      XL       

如何选择没有选项之一的 SKU - 例如在这种情况下 SKU 866CD899-F25F-4C4D-9E56-A4A95A7BDC5D 没有名称为 BK 的颜色选项 - 但应该。

有时产品 (SKU) 有一个或两个或三个选项 - 以及如何找到没有一些选项的 SKU - 可能需要获取最大数量并进行比较,但我不知道。比X

例如,一个产品有 2 个 sku,其中一个有一个树选项 - 另一个有一个选项如何显示 SKU 没有最大选项

【问题讨论】:

    标签: sql sql-server tsql count


    【解决方案1】:

    对于这个问题,我通常更喜欢左外连接,在这种情况下,您可以获取表 A 中的所有行,在这种情况下是 SKU,无论 B 中是否存在匹配项或选项。然后使用 where 子句过滤掉匹配项,这样你就只剩下没有选项的 sku。

    SELECT SKU.*
    FROM SKU
        LEFT OUTER JOIN Options
            ON Options.skuid = SKU.id
    WHERE Options.skuid IS NULL
    

    【讨论】:

    • 最好有一个简短的简介来解释你做了什么,而不是仅仅插入代码......
    • 好点..对不起,我还是新手。感谢您的反馈。我已添加详细信息以提供帮助。
    • 请告诉我,如果它没有一行,为什么它应该为 NULL - 它不起作用
    • 这里是示例的SQL Fiddle,但由于示例数据都有选项,因此必须在没有选项的 SKU 表中添加一行。使用 NULL 以便在由于 LEFT OUTER JOIN 而没有选项时仅返回 SKU。
    • @JasonW - 由于结果中不需要选项表数据,因此使用 NOT EXISTS 总是比 left join/IS NULL 更好,后者在过滤掉空值之前返回所有结果
    【解决方案2】:

    您不想要选项表的任何详细信息,您只想检查选项表中是否存在 skuid 所以..

    SELECT * 
    FROM   sku A
    WHERE  NOT EXISTS (SELECT 1 
                       FROM   options 
                       WHERE  options.skuid = A.skuid) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-21
      • 2014-10-05
      • 1970-01-01
      • 1970-01-01
      • 2012-07-03
      • 2011-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多