我搜索过但无法完全回答问题。我还尝试在我的数据库程序的查询构建器中执行多个查询,但结果不是我所期望的。所以这是我的问题。
假设我有两张桌子,小时条件和员工;
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不匹配,我不希望它返回任何行。但它仍然存在。
答案 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