此SQL查询返回一些结果:
select
"titres".*
from
"titres"
inner join "titres_titulaires" as "titulaires_join" on "titulaires_join"."titre_etape_id" = "titres"."titulaires_titre_etape_id"
inner join "entreprises" as "titulaires" on "titulaires_join"."entreprise_id" = "titulaires"."id"
where
("titulaires"."nom" like '%sma%')
我希望此查询至少返回相同的结果:
select
"titres".*
from
"titres"
inner join "titres_titulaires" as "titulaires_join" on "titulaires_join"."titre_etape_id" = "titres"."titulaires_titre_etape_id"
inner join "entreprises" as "titulaires" on "titulaires_join"."entreprise_id" = "titulaires"."id"
inner join "titres_amodiataires" as "amodiataires_join" on "amodiataires_join"."titre_etape_id" = "titres"."amodiataires_titre_etape_id"
inner join "entreprises" as "amodiataires" on "amodiataires_join"."entreprise_id" = "amodiataires"."id"
where
(
"titulaires"."nom" like '%sma%'
or "amodiataires"."nom" like '%sma%'
)
,但它返回一个空数组。
我在做什么错了?
答案 0 :(得分:1)
使用左连接代替内连接进行最后2个连接
select
"titres".*
from
"titres"
inner join "titres_titulaires" as "titulaires_join" on "titulaires_join"."titre_etape_id" = "titres"."titulaires_titre_etape_id"
inner join "entreprises" as "titulaires" on "titulaires_join"."entreprise_id" = "titulaires"."id"
left join "titres_amodiataires" as "amodiataires_join" on "amodiataires_join"."titre_etape_id" = "titres"."amodiataires_titre_etape_id"
left join "entreprises" as "amodiataires" on "amodiataires_join"."entreprise_id" = "amodiataires"."id"
where
(
"titulaires"."nom" like '%sma%'
or "amodiataires"."nom" like '%sma%'
)
答案 1 :(得分:0)
我将尽力解释为什么会发生这种情况。
让我们假设titres_amodiataires
中没有一行与titres
中的一行匹配,即没有两行满足titres_amodiataires.titre_etape_id = titres.amodiataires_titre_etape_id
。
然后JOIN
的结果将为空,并且在WHERE
条件下应用其他过滤器也不会使其变空。