有条件地在where子句中使用AND语句

时间:2018-10-11 18:10:31

标签: sql sql-server

我有一条sql语句

SELECT emp.id, emp.name, 
FROM emp, office, payment
WHERE emp.id = office.empid 
AND payment.id = emp.pay

但是我实际上想要

 AND payment.id = emp.pay

有条件地执行。它不应该总是执行。例如仅当emp.pay不为空时才应执行

2 个答案:

答案 0 :(得分:0)

我认为您的情况会如下

SELECT emp.id, emp.name, 
FROM emp, office, payment
WHERE emp.id = office.empid 
or (payment.id = emp.pay and emp.pay is not null)

我更喜欢像下面这样的显式联接

SELECT emp.id, emp.name, 
    FROM emp join
    office on emp.id = office.empid
   left join payment on payment.id = emp.pay

答案 1 :(得分:0)

您可以使用CASE WHEN在WHERE子句中形成条件,但是在进行连接时,您的代码是一个可怕的习惯。您不应该那样做联接。

如果仅当emp pay不为null时才想使这些值匹配,则可以编写内部联接。

SELECT emp.id, 
emp.name, 
FROM emp 
INNER JOIN office
ON emp.id = office.empid 
LEFT JOIN payment 
ON payment.id = emp.pay
WHERE emp.pay IS NOT NULL

几行示例数据将有助于确认您希望输出如何显示。