访问与条件结果具有相同值的 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
假设我有一个简单的 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