Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用IF的Mysql复杂连接_Mysql_Sql - Fatal编程技术网

使用IF的Mysql复杂连接

使用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

我想为带有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 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这类问题可能是设计不佳的症状