sql - 使用相关筛选筛选 SQL Server 数据
问题描述
我创建了一个名为的表[Damaged Item]
,其中包含损坏的项目,它看起来像这样:
| Item | Style | Date |
+---------+-----------+----------+
| A1 | A | 12/04/20 |
| | B | 03/12/19 |
我有另一张桌子维护着[Purchased Items]
.
[已购买物品] 满足以下条件的物品会掉落。
如果项目包含在损坏项目表中并且损坏项目日期的日期大于当前日期。
如果 Damded Item 中的 item 字段为 NULL 或 '',那么我必须检查 Style 列。如果购买的物品的样式等于损坏的样式,那么如果损坏的物品日期大于当前日期,我也会删除这些值。
请注意,如果损坏的物品表中有物品,则购买的物品将与损坏的物品一起检查并检查日期,如果损坏的物品日期大于当前日期,我将丢弃该物品,否则如果没有物品,但只有Style 然后我检查 Style with Purchased Items' Style 并检查日期条件并删除记录。如果损坏的项目包含上述数据,那么我正在检查项目以及样式。
我像这样放了一个左连接。
[PurchasedItem] X
LEFT JOIN [DamagedItem] D ON (X.ITNO = D.ITNO)
LEFT JOIN [DamagedItem] E ON (X.Style = E.Style)
此查询 ( X.ITNO = D.ITNO
) 正在删除项目,但从第二次连接开始,它再次获取已删除的项目 (as D.ITNO AS NULL
)。
有人可以帮我做到这一点吗?
解决方案
如果要过滤掉损坏的物品,可以使用not exists
:
selet pi.*
from PurchasedItem pi
where not exists (select 1
from DamagedItem di
where di.ITNO = pi.ITNO and di.date > getdate()
) and
not exists (select 1
from DamagedItem di
where di.ITNO is null and
di.style = pi.style and
di.date > getdate()
);
日期算术看起来很奇怪(未来的损害?),但这就是你所要求的。
推荐阅读
- character - 非法字符;空间不允许
- rust - 在 Rust 中获取控制台宽度
- fuseki - Store add_graph 似乎对 rdflib 和 Fuseki 没有任何作用
- javascript - 如何根据 VueJs 中提供的道具显示不同的 html 元素/标签
- python - 创建 Pycharm 项目的问题
- c# - 从 .NET 中的 WPF 项目调用我的 Delphi COM 对象时未注册类
- java - 使用 JSch 执行 'sudo su -'
- arrays - 是二维数组线性数据结构
- php - json_encode (PHP) + JSON_ARRAYAGG (mySQL) 中的反斜杠
- angular - 启动效果和行动的最佳实践