Sql 在where子句中有条件地使用AND语句
我有一个sql语句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
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年。是时候加强你的比赛了。