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

Sql 在where子句中有条件地使用AND语句,sql,sql-server,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不为空时才应执行该命令。我认为您的条件如下 SELECT emp.id, emp.name, FROM emp, office, payme

我有一个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不为空时才应执行该命令。我认为您的条件如下

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
我更喜欢下面这样的显式连接

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

您可以在WHERE子句中使用
CASE-WHEN
来形成一个条件,但是在连接方面,您的代码是一个糟糕的习惯。你不应该那样做

如果您想使这些值仅在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

几行示例数据将有助于确认您希望输出的外观。

下面答案中的左连接是正确的技术。但您确实需要停止使用逗号分隔的表列表。ANSI-92样式的连接现在已经提供了近25年。是时候加强你的比赛了。