0

だから、私はこのSQLクエリを持っています:

select
  o.id,
  o.name,
  d.name,
  w.day,
  o.suspended
from resource o
  left join resource d on d.vehicle_ID = o.ID
  left join week_days_availability_to_resource aw on d.ID=aw.resource_ID
  left join week_days_availability w on aw.calendar_ID=w.ID
where o.IS_DELETED <> true
      and (d.IS_DELETED is null or d.IS_DELETED <> true)
      and o.marketId = 98
      and (w.day = 3 or w.day is null)
      and (o.suspended <> true or o.id in (-1))  

必要なすべての行を返します-1つだけを除いて。テーブルresource oに と結合された行がありresource d、次に と結合します (このテーブルには と等しいweek_days_availability_to_resource行がいくつかあります)。問題は、withに 3 に等しい行がないため、何も返さないことです。しかし、フィールドの値でこの行を返すことを期待していました-これが実際に行うことだと思ったからです。私が間違っているようです。 何か案は?resource_IDd.IDweek_days_availabilitydaymysqlNULLdayleft join

4

1 に答える 1

1

where条件をon句に移動する必要があると思います。

from resource o
  left join resource d on d.vehicle_ID = o.ID
  left join week_days_availability_to_resource aw on d.ID=aw.resource_ID
  left join week_days_availability w on aw.calendar_ID=w.ID and w.day = 3
where o.IS_DELETED <> true
      and (d.IS_DELETED is null or d.IS_DELETED <> true)
      and o.marketId = 98
      and (w.day = 3 or w.day is null)
      and (o.suspended <> true or o.id in (-1)) 

問題は、それw.dayが他の値、たとえば 4 と等しい可能性があることです。left join条件は (最初に記述されたように) 満たされていますが、条件を満たしていませんwhere。条件をon句に移動すると、一致がなくなり、NULL が返されます。

于 2013-05-15T13:37:14.877 に答える