使用IF的Mysql复杂连接
我想为带有if条件的查询添加一些join语句。我尝试使用CASE func。但它只返回一个表达式。我想质疑的是使用IF的Mysql复杂连接,mysql,sql,Mysql,Sql,我想为带有if条件的查询添加一些join语句。我尝试使用CASE func。但它只返回一个表达式。我想质疑的是 SELECT * FROM table1 JOIN table2 ON (table1.id = table2.id) IF(table1.col1 like '%a%') { JOIN table3 ON ..... LEFT JOIN table4 ON .... ..... } ELSE { JOIN table5 ON .... LEFT J
SELECT * FROM table1 JOIN table2 ON (table1.id = table2.id)
IF(table1.col1 like '%a%')
{
JOIN table3 ON .....
LEFT JOIN table4 ON ....
.....
}
ELSE
{
JOIN table5 ON ....
LEFT JOIN table6 ....
}
WHERE
......
有没有办法创建这样的查询?答案是:可以,但不能使用by if。您需要将if条件添加到join的ON子句中,这样当条件为true时,此列将具有值,当条件为false时,这些值将为null
SELECT * FROM table1
JOIN table2 ON (table1.id = table2.id)
JOIN table3 ON(table1.id = table3.id AND table1.col like '%a%')
LEFT JOIN table4 ON(table1.id = table4.id AND table1.col like '%a%')
JOIN table5 ON(table1.id = table5.id AND table1.col not like '%a%')
LEFT JOIN table6 ON(table1.id = table6.id AND table1.col not like '%a%')
不能拆分表,将几行连接到一个表,将另一行连接到另一个表。。所以这是我能想到的最好的方法 即使table1.col包含空值,这是否有效?@jarlh嗯,我不认为他会有这种可能性。。hellzone如果是这样的话,告诉我,我会更新答案,尽管我假设不是。@sagi No.table1.col没有空值。那么这就是你的答案@hellzone这类问题可能是设计不佳的症状