2017-02-20 28 views
0

我有这个疑问,工作正常:MySQL的多个别名地加入反对加入表

select table_1.*, coalesce(test_1.type) as type 
from `tbl_1` 
left join `table_2` on `table_1`.`table_1_id` = `table_1`.`id` 
inner join `table_3` as `test_1` on `test_1`.`code` = `table_2`.`column` and `table_2`.`column` = 'L' 

所以,这是一个连接上表2表1查询,然后随后加入其中,从表的多个别名加入3表2,但只要我添加更多的连接,我没有得到任何结果,我不知道为什么,例如:

select table_1.*, coalesce(test_1.type, test_2.type) as type 
from `tbl_1` 
left join `table_2` on `table_1`.`table_1_id` = `table_1`.`id` 
inner join `table_3` as `test_1` on `test_1`.`code` = `table_2`.`column` and `table_2`.`column` = 'L' 
inner join `table_3` as `test_2` on `test_2`.`code` = `table_2`.`column` and `table_2`.`column` = 'H' 

谁能解释我做了什么错?

+2

尝试'table_3'上的'LEFT'连接。如果没有'table_3'的记录,这就是为什么你不会得到任何结果,因为'INNER'加入。其实,你没有加入'table_3'上的任何列。最有可能的问题。 –

+0

啊,谢谢!如果你添加这个答案,那么我会接受它。 – martincarlin87

回答

1

尝试LEFT加入table_3。如果没有table_3的记录,这就是为什么由于INNER连接而没有结果。

实际上,您并未加入table_3的任何栏目。最有可能的问题。

1

第二个查询的预期样本结果是什么?
你可以试试这个查询吗?

select table_1.*, coalesce(test_1.type) as type 
from `tbl_1` 
left join `table_2` on `table_1`.`table_1_id` = `table_1`.`id` 
inner join `table_3` as `test_1` on `test_1`.`code` = `table_2`.`column` and   
    (`table_2`.`column` = 'L' or `table_2`.`column` = 'H') 
+0

谢谢,@ WEI_DBA的答案是我所需要的,我使用的是内部连接而不是左连接(在我的laravel雄辩查询中生成原始sql的错误),但我试图使用coalesce函数来获取来自另一个表(表3)的列值,基于表2中列的值和列。 – martincarlin87