在三个表上联接,不显示所有记录

时间:2018-10-22 17:50:11

标签: mysql select

我有以下代码:

SELECT 
*
FROM 
produto_unidades
join produto_notas on produto_notas.id = produto_unidades.produtoNota_id
join produto_licitacoes on produto_licitacoes.id = produto_notas.produtoLicitacoes_id
where produto_unidades.unidade_id = 2

此代码正常工作,但是我需要获取produto_licitacoes的所有记录。

有什么主意吗?

2 个答案:

答案 0 :(得分:1)

两个100ms可以做到:

RIGHT JOIN

但是,对我来说,使用SELECT * FROM produto_unidades right join produto_notas on produto_notas.id = produto_unidades.produtoNota_id right join produto_licitacoes on produto_licitacoes.id = produto_notas.produtoLicitacoes_id and produto_unidades.unidade_id = 2 语法更容易阅读。请注意,表格以倒序显示:

LEFT JOIN

答案 1 :(得分:1)

  • 使用left join代替inner join。将produto_licitacoes表格设为最左侧的表格;这样可以确保produto_licitacoes表的所有行都确实出现在结果中。
  • 使用左联接时,您需要将表上的where条件(最左边的除外)转移到联接on条件。

尝试以下操作:

SELECT 
*
FROM 
produto_licitacoes 
left join produto_notas 
  on produto_licitacoes.id = produto_notas.produtoLicitacoes_id 
left join produto_unidades 
  on produto_notas.id = produto_unidades.produtoNota_id and 
     produto_unidades.unidade_id = 2