【问题标题】:Query that allows double Search允许双重搜索的查询
【发布时间】:2015-06-29 18:55:47
【问题描述】:

这是我拥有的当前表。

WeldingProcedure  
ID        TYPE     Metal1        Metal2      ThicknessMin       ThicknessMax
50-1      SMAW       1             2              1                  2
50-2      SAW        2             2              3                  5
51-3      FCAW       3             2              2                  6
52-1      SMAW       1             2             0.5                 2

我当前的查询是

SELECT *
FROM WeldingProcedure as WPS
WHERE WPS.[Metal#(P-No)]=Forms!MatchSearch_form!metal1  
And WPS.[Metal#2(P-No)]=Forms!MatchSearch_form!metal2   
And WPS.ThicknessMin<=Forms!MatchSearch_form!thickness
And WPS.ThicknessMax>=Forms!MatchSearch_form!thickness
And WPS.[Welding _Type]=Forms!MatchSearch_form!weldingtype

所以当我使用以下条件进行搜索时:

Type = SMAW  
Metal1 = 1
Metal2 = 2
Thickness = 1.5

我得到了

的结果
ID        TYPE     Metal1        Metal2      ThicknessMin      ThicknessMax
50-1      SMAW       1             2              1                  2
52-1      SMAW       1             2             0.5                 2

我希望用户也能够键入

Type = SMAW  
Metal1 = 2
Metal2 = 1
Thickness = 1.5 

并得到相同的结果。我可以做些什么来更改查询以实现这一点?如果我输入两次值,它会在表格中出现。

【问题讨论】:

  • 我不确定我是否完全理解...您希望您的用户能够输入与您的表中的任何行都不匹配的信息并基于此返回结果吗?或者您是否希望每个 ID 有多个 Metal1 和 Metal2 值?
  • 是的,@Wolves 点,Metal2 = 1 不会返回任何内容?但是,如果您希望将金属 1 和金属 2 视为另一回事

标签: sql ms-access ms-access-2007


【解决方案1】:
SELECT  *
FROM    WeldingProcedure as WPS
WHERE   ((WPS.[Metal#(P-No)] = Forms!MatchSearch_form!metal1 AND WPS.[Metal#2(P-No)] = Forms!MatchSearch_form!metal2) OR (WPS.[Metal#(P-No)] = Forms!MatchSearch_form!metal2 AND WPS.[Metal#2(P-No)] = Forms!MatchSearch_form!metal1))
        AND WPS.ThicknessMin<=Forms!MatchSearch_form!thickness
        AND WPS.ThicknessMax>=Forms!MatchSearch_form!thickness
        AND WPS.[Welding _Type]=Forms!MatchSearch_form!weldingtype

【讨论】:

  • 我在 SELECT WPS 上遇到语法错误。[Metal#(P-No)], WPS.[Metal#2(P-No)] INTERSECT ( SELECT Forms!MatchSearch_form!metal1, Forms! MatchSearch_form!metal2 UNION SELECT Forms!MatchSearch_form!metal2, Forms!MatchSearch_form!metal1)
  • 你用的是什么关系型数据库?
  • 我正在使用 access 2007
  • @raymondSee:是的,我从你之前的帖子中知道了。查看更新。
  • 开我的玩笑,我没有意识到我可以只做一个括号并添加一个 OR ......谢谢!!!
【解决方案2】:

如果我理解正确,您希望用户输入 2 个值并返回 Metal1 和 Metal2 等于这两个值的记录,但用户可以按任一顺序输入值(即输入 Metal1 然后 Metal2 或输入 Metal2 然后金属1)。

如果是这样,那么这就是您想要的查询。

SELECT *
FROM WeldingProcedure as WPS
WHERE 
(
    (WPS.[Metal#(P-No)]=Forms!MatchSearch_form!metal1 And WPS.[Metal#2(P-No)]=Forms!MatchSearch_form!metal2)
    OR
    (WPS.[Metal#(P-No)]=Forms!MatchSearch_form!metal2 And WPS.[Metal#2(P-No)]=Forms!MatchSearch_form!metal1)
)
And WPS.ThicknessMin<=Forms!MatchSearch_form!thickness
And WPS.ThicknessMax>=Forms!MatchSearch_form!thickness
And WPS.[Welding _Type]=Forms!MatchSearch_form!weldingtype

【讨论】:

  • 开我的玩笑,我没有意识到我可以只做一个括号并添加一个 OR...谢谢!!!
  • @raymondSee 不,我是在开玩笑。我回答了这个问题,但您没有投票,而是选择接受另一个答案,该答案最初并不那么简单或有效,并且在将其编辑为我的答案的副本之前实际上并没有为您工作。那么,酸葡萄?是的。 :) 但是外面温暖而阳光明媚,所以我的一天还是过得很好。
  • LOL 由于某种原因,它没有得到支持和回答。很抱歉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-28
  • 1970-01-01
相关资源
最近更新 更多