首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL -排除至少一次满足要求的列的值

SQL -排除至少一次满足要求的列的值
EN

Stack Overflow用户
提问于 2018-02-23 16:03:26
回答 1查看 132关注 0票数 1

有两个表ClientStock

代码语言:javascript
复制
Table Client
    Column IDC       (primary key, int, not null)

Table Stock
    Column IDS       (primary key, int, not null)
    Column IDC       (int, not null)
    Column Type      (bit, not null)
    Column Price     (decimal(10,2), null)

它们将被视为由Client.IDC = Stock.IDC连接。

使用Type = 1Price not NULL获取客户端的IDC非常简单。但是,获取剩余IDC的列表对我来说并不是一件容易的事。以下尝试未提供正确的IDC列表

代码语言:javascript
复制
SELECT [Client].[IDC]
FROM [Client] LFEFT JOIN [Stock] on [Client].[IDC] = [Stock].[IDC]
WHERE NOT([Stock].[Type] = 1 AND [Stock].[Price] IS NOT NULL)

这条语句返回一些应该被排除的IDC,因为对于它们来说,确实有包含Type = 0的行,但还有其他包含Type = 1Price not NULL的行。我应该如何继续获取与Type = 1Price not NULL完全没有关系的IDC

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-23 16:06:14

移动ON子句中的条件。

这意味着ON子句中的条件将在与Stock连接之前过滤表Client中的行。

代码语言:javascript
复制
SELECT [Client].[IDC]
FROM [Client] 
     LEFT JOIN [Stock] 
         on [Client].[IDC] = [Stock].[IDC]
              AND [Stock].[Type] = 1 
              AND [Stock].[Price] IS NOT NULL
WHERE [Stock].[IDC] IS NULL

这也可以使用NOT EXISTS进行转换

代码语言:javascript
复制
SELECT [Client].[IDC]
FROM [Client] c
WHERE NOT EXISTS
(
    SELECT 1
    FROM [Stock] s
    WHERE c.[IDC] = s.IDC
              AND s.[Type] = 1 
              AND s.[Price] IS NOT NULL
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48943585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档