访问与条件结果具有相同值的 SQL Select 行

Access SQL Select rows that have value in common with results of condition

假设我有一个简单的 table,格式如下:

==================================
| 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 是一个文本字段,Box 是一个整数,Delivered 是一个布尔值(或 BIT,在 Access 中是已知的)。

像这样的查询获取已交付所有内容的列表:

SELECT * FROM Deliveries WHERE Delivered = True

但是,每张发票可以有多个箱子(发票 1111 就是这种情况),有时并非所有箱子都同时送达。如果一个箱子已经送达,我希望能够获得具有相同发票编号的其他箱子的状态。

我知道我可以 运行 多个查询来执行此操作。我在上面提到的那个,然后是另一个循环遍历所有 return 结果的那个,然后 运行s 另一个 select with Invoice = ####.

有没有办法在一个查询中完成所有这些?我认为它可能在 WHERE EXISTS,但我找不到如何构造查询。

理想情况下,我希望针对上述单个查询编辑的行 return 可以是 ID 为:1、2 和 5 的行。这是我要查找的输出:

==================================
| ID | Invoice | Box | Delivered |
==================================
|  1 |   1111  |  1  |   True    |
----------------------------------
|  2 |   1111  |  2  |   False   |
----------------------------------    
|  5 |   4444  |  1  |   True    |
----------------------------------

因此,即使 ID 2 的 Delivered = False,它仍然是 returned,因为另一个具有相同发票编号的项目已 Delivered = True

尝试一些查询时出现错误

Cannot join on memo, ole or hyperlink Object

假设你想要这样的东西

select * from invoice where invoice in (SELECT invoice FROM invoice WHERE Delivered = 'True')

使用嵌套查询,您可以选择输出发票编号以供在父查询中参考。这里嵌套查询的输出是用来'filter'的结果。

你已经让它工作了,但这是另一种方法,不改变 table。

SELECT invoice.ID, invoice.Invoice, invoice.Box, invoice.Delivered, invoice_1.Delivered AS Expr1
FROM invoice, invoice AS invoice_1
WHERE (((invoice.Invoice)=[invoice_1].[Invoice]) AND (([invoice_1].[Delivered])=Yes));

你可以测试一下here

对于那些遇到同样问题的人,有解释和解决方案here

抱歉,如果我弄乱了 Access 语法:

select id
from T
group by id
having sum(iif(Delivered, 1, 0) < count(*)

调用上述查询IC(不完整)。您可能希望查看所有未传送的数据以及 ID:

select * from T
where id in (<IC>) and Delivered = false