2013-03-14 94 views
2

这里的情况添加多个条件: -IF在mysql中声明加入 - 如果成功的条件

我想加入2个表。比方说表ab

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子句添加这样的条件

只应增加?

ON a.id = b.id 
CASE 
    IF (b.stage in (1, 3, 5, 6, 8)) 
THEN 
    AND b.status = '1' 
END 
+2

好,你可以随时使用布尔逻辑绕过这样一个子句:'AND(b.status ='1'或b.stage NOT IN(1,3,5,6,8))' – Najzero 2013-03-14 12:21:30

+0

问题的轻微变化。 – Sahal 2013-03-14 12:24:32

回答

5

你的条件是逻辑上等同于“要么阶段是不在列表状态1”:

SELECT * 
FROM a 
JOIN b ON a.id = b.id 
    AND (b.stage not in (1, 3, 5, 6, 8) OR b.status = '1') 
+0

我不能把'不在'那里。因为我想要(1,3,5,6,8)也记录。 – Sahal 2013-03-14 12:22:47

+0

@Sahal它的正确,你想要包括那些,但只有当他们有b.status = 1。它是一个“组合条款”,并符合你的要求从你的问题 – Najzero 2013-03-14 12:24:20

+0

你能更具体吗?这个查询正是你所要求的。如果'stage'在列表中,则仅在测试'status = 1'时逻辑上相同。 – Bohemian 2013-03-14 12:24:24