有两个表Client和Stock
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 = 1和Price not NULL获取客户端的IDC非常简单。但是,获取剩余IDC的列表对我来说并不是一件容易的事。以下尝试未提供正确的IDC列表
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 = 1和Price not NULL的行。我应该如何继续获取与Type = 1和Price not NULL完全没有关系的IDC?
发布于 2018-02-23 16:06:14
移动ON子句中的条件。
这意味着ON子句中的条件将在与Stock连接之前过滤表Client中的行。
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进行转换
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
)https://stackoverflow.com/questions/48943585
复制相似问题