使用 Criteria 的查询未返回准确或相关的结果
Query with Criteria is not returning accurate or relevant results
我在 table 中有一个包含 9 条记录的数据集,这是测试数据。
我有以下数据样本。
在下面的 table 中,第一行是 header.
+-------------+-------------+----------+---------------+---------------+
| BehrInvoice | TboInvoice | TboRloc | TboDoc | TboPax |
+-------------+-------------+----------+---------------+---------------+
| 4312 | 1449S | WIUBLF | -0772089627 | ASARCH/CHAD |
| 4313 | 1457S | TAQXKU | XD7366998723 | CARREON JR/L |
| 4314 | 1457S | TAXXKU | -7366998723 | CARREON JR/L |
| 4317 | 1461S | TOXSEH | XD7366998726 | ALVA/MICHAEL |
| 4318 | 1460S | TOXSEH | -7366998726 | ALVA/MICHAEL |
| 4320 | 1458S | ULHHZO | -7366998724 | GREENFIELD/M |
+-------------+-------------+----------+---------------+---------------+
我想做的是能够搜索每一列,
一起。
我希望如果我输入 alva
我会看到
Alva/Michael
记录弹出,至少首先出现。
或者,如果我在 TboInvoice
搜索框 1458
中输入 alva
TboPax
搜索框,我会看到所有这三个记录。
我正在尝试使用这个:
SELECT *
FROM Main
WHERE ((Main.TboInvo) LIKE [Forms]![SearchForm]![TboInvoice] & "*")
OR ((Main.TboPax) LIKE [Forms]![SearchForm]![PaxName] & "*")
但是结果集全部返回。
我隔离到 TboInvoice,并尝试了这个:
WHERE ((Main.TboInvo) = [Forms]![SearchForm]![TboInvoice] & "[S]")
它什么也没带回来。
我想我应该只关注这里的 TboInvoice
,并正确地获取 运行。
所以,综上所述,问题是:
如何在此处查询 TboInvoice
列并获得更准确的结果?
===
编辑 190906
所以当我输入:
SELECT * FROM Main
WHERE Main.TboPax LIKE "alva*";
它工作得很好。
当我输入:
SELECT *
FROM Main
WHERE (((Main.TboPax) Like [Forms]![SearchForm]![PaxName]));
AND [PaxName]== "alva" 形式的值,我什么也没得到。也许我引用的表格不正确?
您的第一个查询 returns 一切的原因是因为如果文本框 TboInvoice
或 PaxName
中的任何一个为空,那么 [Forms]![SearchForm]![TboInvoice] & "*"
将产生 "*"
, 从而匹配所有记录.
考虑到这一点,您将需要在选择标准中包含一个测试,以说明表单控件何时为空,可能类似于:
select * from main
where
(
[Forms]![SearchForm]![TboInvoice] is not null and
main.tboinvo like [Forms]![SearchForm]![TboInvoice] & "*"
) or
(
[Forms]![SearchForm]![PaxName] is not null and
main.tbopax like [Forms]![SearchForm]![PaxName] & "*"
)
根据所需的行为,如果 both 表单控件为空,您可能希望返回 all 记录,这需要第三个条件如:
select * from main
where
(
[Forms]![SearchForm]![TboInvoice] is not null and
main.tboinvo like [Forms]![SearchForm]![TboInvoice] & "*"
) or
(
[Forms]![SearchForm]![PaxName] is not null and
main.tbopax like [Forms]![SearchForm]![PaxName] & "*"
) or
(
[Forms]![SearchForm]![TboInvoice] is null and
[Forms]![SearchForm]![PaxName] is null
)
也可以这样写:
select * from main
where
(
[Forms]![SearchForm]![TboInvoice] is null or
main.tboinvo like [Forms]![SearchForm]![TboInvoice] & "*"
) and
(
[Forms]![SearchForm]![PaxName] is null or
main.tbopax like [Forms]![SearchForm]![PaxName] & "*"
)
并注意到 Null & "*"
产生 "*"
,这可能会变成:
select * from main
where
main.tboinvo like [Forms]![SearchForm]![TboInvoice] & "*"
and
main.tbopax like [Forms]![SearchForm]![PaxName] & "*"
我怀疑你只是想要 and
:
SELECT *
FROM Main
WHERE (Main.TboInvo LIKE [Forms]![SearchForm]![TboInvoice] & "*") AND
(Main.TboPa LIKE [Forms]![SearchForm]![PaxName] & "*")
如果您使用 OR
并将任一文本框留空,则该文本框的条件将包含所有行。
我在 table 中有一个包含 9 条记录的数据集,这是测试数据。 我有以下数据样本。 在下面的 table 中,第一行是 header.
+-------------+-------------+----------+---------------+---------------+
| BehrInvoice | TboInvoice | TboRloc | TboDoc | TboPax |
+-------------+-------------+----------+---------------+---------------+
| 4312 | 1449S | WIUBLF | -0772089627 | ASARCH/CHAD |
| 4313 | 1457S | TAQXKU | XD7366998723 | CARREON JR/L |
| 4314 | 1457S | TAXXKU | -7366998723 | CARREON JR/L |
| 4317 | 1461S | TOXSEH | XD7366998726 | ALVA/MICHAEL |
| 4318 | 1460S | TOXSEH | -7366998726 | ALVA/MICHAEL |
| 4320 | 1458S | ULHHZO | -7366998724 | GREENFIELD/M |
+-------------+-------------+----------+---------------+---------------+
我想做的是能够搜索每一列, 一起。
我希望如果我输入 alva
我会看到
Alva/Michael
记录弹出,至少首先出现。
或者,如果我在 TboInvoice
搜索框 1458
中输入 alva
TboPax
搜索框,我会看到所有这三个记录。
我正在尝试使用这个:
SELECT *
FROM Main
WHERE ((Main.TboInvo) LIKE [Forms]![SearchForm]![TboInvoice] & "*")
OR ((Main.TboPax) LIKE [Forms]![SearchForm]![PaxName] & "*")
但是结果集全部返回。 我隔离到 TboInvoice,并尝试了这个:
WHERE ((Main.TboInvo) = [Forms]![SearchForm]![TboInvoice] & "[S]")
它什么也没带回来。
我想我应该只关注这里的 TboInvoice
,并正确地获取 运行。
所以,综上所述,问题是:
如何在此处查询 TboInvoice
列并获得更准确的结果?
=== 编辑 190906
所以当我输入:
SELECT * FROM Main
WHERE Main.TboPax LIKE "alva*";
它工作得很好。 当我输入:
SELECT *
FROM Main
WHERE (((Main.TboPax) Like [Forms]![SearchForm]![PaxName]));
AND [PaxName]== "alva" 形式的值,我什么也没得到。也许我引用的表格不正确?
您的第一个查询 returns 一切的原因是因为如果文本框 TboInvoice
或 PaxName
中的任何一个为空,那么 [Forms]![SearchForm]![TboInvoice] & "*"
将产生 "*"
, 从而匹配所有记录.
考虑到这一点,您将需要在选择标准中包含一个测试,以说明表单控件何时为空,可能类似于:
select * from main
where
(
[Forms]![SearchForm]![TboInvoice] is not null and
main.tboinvo like [Forms]![SearchForm]![TboInvoice] & "*"
) or
(
[Forms]![SearchForm]![PaxName] is not null and
main.tbopax like [Forms]![SearchForm]![PaxName] & "*"
)
根据所需的行为,如果 both 表单控件为空,您可能希望返回 all 记录,这需要第三个条件如:
select * from main
where
(
[Forms]![SearchForm]![TboInvoice] is not null and
main.tboinvo like [Forms]![SearchForm]![TboInvoice] & "*"
) or
(
[Forms]![SearchForm]![PaxName] is not null and
main.tbopax like [Forms]![SearchForm]![PaxName] & "*"
) or
(
[Forms]![SearchForm]![TboInvoice] is null and
[Forms]![SearchForm]![PaxName] is null
)
也可以这样写:
select * from main
where
(
[Forms]![SearchForm]![TboInvoice] is null or
main.tboinvo like [Forms]![SearchForm]![TboInvoice] & "*"
) and
(
[Forms]![SearchForm]![PaxName] is null or
main.tbopax like [Forms]![SearchForm]![PaxName] & "*"
)
并注意到 Null & "*"
产生 "*"
,这可能会变成:
select * from main
where
main.tboinvo like [Forms]![SearchForm]![TboInvoice] & "*"
and
main.tbopax like [Forms]![SearchForm]![PaxName] & "*"
我怀疑你只是想要 and
:
SELECT *
FROM Main
WHERE (Main.TboInvo LIKE [Forms]![SearchForm]![TboInvoice] & "*") AND
(Main.TboPa LIKE [Forms]![SearchForm]![PaxName] & "*")
如果您使用 OR
并将任一文本框留空,则该文本框的条件将包含所有行。