使用给定值和FK

时间:2016-02-23 10:28:10

标签: sql sqlite sql-like

我搜索过但无法完全回答问题。我还尝试在我的数据库程序的查询构建器中执行多个查询,但结果不是我所期望的。所以这是我的问题。

假设我有两张桌子,小时条件和员工;

hour_entries中有PK(obv。),员工有PK和FK(此外键是指表1的PK)。

假设表hour_entries中的列是HourType(编程,清理等),描述和TotalHours(5,2等)。而FK称为EmployeeID。

在这个其他表(员工)中,您只能获得有关员工的常规信息。名字,姓氏等。

当我执行这样的查询时

SELECT FirstName, LastName, JobType, Description FROM hour_entries
LEFT (OUTER) JOIN employees on employees.EmployeeID = hour_entries.EmployeeID WHERE UPPER(Description) LIKE UPPER('%Bla%') OR UPPER(HourType) LIKE UPPER('%Bla%') AND EmployeeID = 4;

这似乎给了我回来的信息,它与描述和hourtype的检查相匹配。但它也会返回具有不同EmployeeID的行。

我想要具有给定EmployeeID的员工信息。所以如果你把它放在if语句中,它就会是这样的。

if(EmployeeID == givenid&& Description ==“Bla”|| HourType ==“Bla”)

如果描述不匹配,它还可以查看hourtype是否仍然匹配。如果employeeID不匹配,我不希望它返回任何行。但它仍然存在。

1 个答案:

答案 0 :(得分:1)

您需要在On子句中保留所有加入条件。在Where条款中,他们有效地将Left Join转换为Inner Join。在这种特殊情况下,它应该是hour_entries.EmployeeID,而不是employees.EmployeeID中的Where。你还会错过OR周围的括号:

SELECT FirstName, LastName, JobType, Description
FROM hour_entries
LEFT (OUTER) JOIN employees
    ON employees.EmployeeID = hour_entries.EmployeeID
WHERE hour_entries.EmployeeID = 4 --<- "FROM" table here, not "JOIN"
  AND (                           --<- Brackets around OR
          UPPER(Description) LIKE UPPER('%Bla%')
       OR UPPER(HourType) LIKE UPPER('%Bla%')
      );                          --<- Brackets around OR