【发布时间】:2016-02-26 07:26:39
【问题描述】:
假设我有一个简单的表格,格式如下:
==================================
| ID | Invoice | Box | Delivered |
==================================
| 1 | AA11 | 1 | True |
----------------------------------
| 2 | AA11 | 2 | False |
----------------------------------
| 3 | AA22 | 1 | False |
----------------------------------
| 4 | AA33 | 1 | False |
----------------------------------
| 5 | AA44 | 1 | True |
----------------------------------
ID 是一个唯一的整数,Invoice 是一个 TEXT 字段,Box 是一个整数,Delivered 是一个布尔值(或 BIT,正如 Access 中所知)。
这样的查询会获取已交付的所有内容的列表:
SELECT * FROM Deliveries WHERE Delivered = True
但是,每张发票可以有多个箱子(例如 1111 号发票就是这种情况),有时并非所有箱子都同时送达。如果一个盒子已经送达,我希望能够获得具有相同发票号码的其他盒子的状态。
我知道我可以运行多个查询来执行此操作。我上面提到的一个,然后另一个循环遍历所有返回结果,然后使用 Invoice = #### 运行另一个选择。
有没有办法在一个查询中完成所有这些操作?我认为它可能在 WHERE EXISTS,但我不知道如何构造查询。
理想情况下,我希望为上述单个查询返回的行能够是 ID 为:1、2 和 5 的行。这是我正在寻找的输出:
==================================
| ID | Invoice | Box | Delivered |
==================================
| 1 | 1111 | 1 | True |
----------------------------------
| 2 | 1111 | 2 | False |
----------------------------------
| 5 | 4444 | 1 | True |
----------------------------------
因此,即使 ID 2 的 Delivered = False,它仍然会被退回,因为具有相同发票编号的另一个项目已 Delivered = True
尝试一些查询时出现错误
无法加入备忘录、ole 或超链接对象
【问题讨论】:
标签: sql ms-access select where exists