【问题标题】:SQL Statement with 3 conditions具有 3 个条件的 SQL 语句
【发布时间】:2015-06-07 00:58:41
【问题描述】:

我有两张桌子:

Name    Forename   CostCentre
Max      Meier       11111
Paul     Peters      22222
Kai      Green       11111

CostCentre   departmentCostCentre
11111                 HR
22222                 IT

除此之外,我还有一个搜索字段和一个成本中心组合框。

如果我在搜索字段中输入“a”并在成本中心输入“11111”,我将获得所有记录...

但我只想得到 Max 和 Kai。这是我的 SQL 语句:

SELECT tbl_Employee.Name, tbl_Employee.Forename, tbl_Employee.CostCentre, tbl_Department.Department
FROM tbl_DepartmentINNER JOIN tbl_EmployeeON tbl_Department.CostCentre= tbl_Employee.CostCentre
WHERE tbl_Employee.Name Like "*a*" OR tbl_Employee.Forename Like "*a*"AND tbl_Mitarbeiter.CostCentre=44444;

我真的不知道错误在哪里......如果我删除名称或名字条件它工作正常,但我得到奇怪的结果......

【问题讨论】:

  • 在您的示例中,它们三个都有包含aNames,因此应该返回所有三个。话虽如此,您的示例数据似乎是错误的(forename 列中的值看起来不像名字)。

标签: sql ms-access inner-join


【解决方案1】:

如果您希望成本中心条件始终适用并且名称条件适用于任一名称,那么您需要使用括号:

SELECT * FROM tbl_Employee
WHERE (tbl_Employee.Name Like 'a' Or
      tbl_Employee.Forename Like 'a') And
      tbl_Employee.CostCentre=22222;

否则,AndOr 绑定得更紧密,而您的意思是 either Name 条件必须匹配 @987654325 @ 和 CostCentre 条件必须匹配。

您的问题确实已经在您的代码中包含了一些括号,这些括号已被我删除。我不确定它们与什么有关。


基于更新的查询:

SELECT tbl_Employee.Name, tbl_Employee.Forename, tbl_Employee.CostCentre, tbl_Department.Department
FROM tbl_DepartmentINNER JOIN tbl_EmployeeON tbl_Department.CostCentre= tbl_Employee.CostCentre
WHERE
   (
      tbl_Employee.Name Like "*a*"
      OR
      tbl_Employee.Forename Like "*a*"
   )
   AND
   tbl_Mitarbeiter.CostCentre=44444;

【讨论】:

  • @okaisan1 - 似乎仍然是同样的问题 - 当您有 ORs 和 ANDs 的组合而不使用 () 括号时,ANDs 的绑定比ORs 所以没有()s,你要求“任何匹配Name的东西”或“任何匹配Forename和匹配CostCentre的东西”
【解决方案2】:
SELECT
    *
FROM
    tbl_Employee
WHERE
    tbl_Employee.Name LIKE '%a%'
    AND tbl_Employee.CostCentre = 11111;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多