使用条件查询无法返回准确或相关的结果

时间:2019-08-31 01:49:45

标签: sql ms-access ms-access-forms

我在一个表中有9条记录的数据集,即测试数据。 我有下面的数据样本。 在下表中,第一行是标题。

+-------------+-------------+----------+---------------+---------------+
| 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中输入alvaTboPax搜索框,我将看到所有这三个记录。

我正在尝试使用它:

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]));

并且[PaxName] ==“ alva”形式的值,我什么也没得到。也许我引用的表格不正确?

2 个答案:

答案 0 :(得分:1)

我怀疑您只是想and

SELECT *
FROM Main
WHERE (Main.TboInvo LIKE [Forms]![SearchForm]![TboInvoice] & "*") AND
      (Main.TboPa LIKE [Forms]![SearchForm]![PaxName] & "*")

如果您使用OR并将任何一个文本框保留为空,则该文本框的条件将包括所有行。

答案 1 :(得分:0)

您的第一个查询返回所有内容的原因是,如果data=spss.SavReader('file name', returnHeader=True) df= pd.DataFrame(data) df.loc[0]=df.loc[0].apply(lambda x: x[2:len(x)-1]) 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] & "*"
)

也可以这样写:

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 & "*",这可能变成:

"*"