首页 > 解决方案 > 或者查询不返回结果,而单独的查询返回结果

问题描述

此 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%'
  )

但它返回一个空数组。

我在这里做错了什么?

标签: sqlpostgresqljoin

解决方案


最后 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%'
  )

推荐阅读