mysql JOIN中的IF语句-如果条件成功,则添加多个条件

mysql JOIN中的IF语句-如果条件成功,则添加多个条件,mysql,Mysql,情况如下:- 我想加入两个表。假设表a和b SELECT * FROM a JOIN b ON a.id = b.id AND b.status = '1' 问题是: b.status = '1' 应仅在以下情况下添加 b.stage in (1, 3, 5, 6, 8) 如何在ON子句中添加此类条件 像 您的条件在逻辑上与“任一阶段不在列表中或状态为1”相同: 好的,您可以使用布尔逻辑绕过这样的子句:和(b.status='1'或b.stage NOT IN(1,3,5,6,8))

情况如下:-

我想加入两个表。假设表
a
b

SELECT * 
FROM a 
JOIN b ON a.id = b.id AND b.status = '1' 
问题是:

b.status = '1'
应仅在以下情况下添加

b.stage in (1, 3, 5, 6, 8)
如何在
ON
子句中添加此类条件


您的条件在逻辑上与“任一阶段不在列表中或状态为1”相同:


好的,您可以使用布尔逻辑绕过这样的子句:
和(b.status='1'或b.stage NOT IN(1,3,5,6,8))
有问题的细微更改。我不能将
NOT IN
放在那里。因为我还想要(1,3,5,6,8)条记录。@Sahal这是正确的,您想要包括这些记录,但前提是它们的b.status=1。这是一个“组合条款”,符合您的问题要求。您能更具体一点吗?这个查询正是您所要求的。如果列表中有
stage
,则它在逻辑上与仅测试
status=1
相同。即使在您做了一些细微的更改之后,此查询也是您想要的。相信我。我已经编写SQL代码25年了,在我的学位中,我把形式逻辑作为一门学科来学习。@Sahal这样的查询不能在一个纯SQL shell中构造。要么使用Bohemian和我自己提供的布尔逻辑(我仍然相信这正是您需要的),要么您需要让“更高”的逻辑(例如存储过程或任何编程语言)构造查询
ON a.id = b.id 
CASE
   IF (b.stage in (1, 3, 5, 6, 8))
THEN
   AND b.status = '1'
END
SELECT * 
FROM a 
JOIN b ON a.id = b.id 
    AND (b.stage not in (1, 3, 5, 6, 8) OR b.status = '1')