sql - 仅选择所有链接记录都满足条件的记录

标签 sql sql-server

两个表之间有经典的 1:n 关系,如下所示: enter image description here

我只需要选择所有订单都为“NOT OrderDate IS NULL”的客户。我开始于

SELECT Customers.Id, Customers.LastName
  FROM Customers, Orders
 WHERE Customers.Id = Orders.CustomerId AND NOT Orders.OrderDate IS NULL AND ...

并希望通过“FOR ALL”进一步构建,但失败了。

我尝试了答案中给出的建议,但没有给出正确的结果。

这是我使用两个临时表的解决方法,如下所示:

DECLARE @TableA TABLE (
    Id int,
    CountA   int
)

DECLARE @TableB TABLE (
    Id int,
    CountB   int
)

INSERT INTO @TableA (Id, CountA)
SELECT        Customers.Id, COUNT(Orders.Id)
FROM            Customers INNER JOIN
                         Orders ON Customers.Id = Orders.CustomerId
GROUP BY Customers.ID

INSERT INTO @TableB (Id, CountB)
SELECT        Customers.Id, COUNT(Orders.Id)
FROM            Customers INNER JOIN
                         Orders ON Customers.Id = Orders.CustomerId
WHERE (NOT Orders.OrderDate IS NULL)                     
GROUP BY Customers.ID

Select tA.Id 
FROM  @TableA tA INNER JOIN  @TableB tB on tA.Id = tB.Id
WHERE tA.CountA = tB.CountB

两个临时表的不同之处仅在于,第一个临时表选择订单中没有条件的组计数,第二个临时表选择有条件的组计数。然后连接 CountA = CountB 的两个临时表,仅给出所有相关订单都满足条件的客户。

如果有人找到更优雅的方式,请告诉我。

最佳答案

Any suggestions how to tackle this?

在这种情况下,您需要考虑不要查找所有相关记录都满足条件的记录。

相反,考虑查找不存在违反条件的相关记录的所有记录。

关于sql - 仅选择所有链接记录都满足条件的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50337840/

相关文章:

c# - SqlParameter 已包含在另一个 SqlParameterCollection 中 - 是否使用(){}作弊?

php - 使用 PHP 连接到列式数据库

mysql - 我如何将 3 个表与 MySQL 连接在一起...并省略第二个 "Middle"表中的列

sql - 有效地根据最小日期匹配两个表

mysql - 为什么Mysql的Group By和Oracle的Group by行为不同

mysql - 合并行并给我总计数

sql-server - 离线存储一些 SQL Server 数据

asp.net - 在 ASP.NET 中从数据库自动生成 ID

java - (JDK 1.6 和 ojdbc6.jar)与(JDK 1.5 和 ojdbc14.jar)

sql - 计算具有相同关系的行数