1

変換前のクエリ

SELECT w.tech AS tech,
       w.wpcddate AS job_date,
       w.corp AS corp,
       w.house AS house_number,
       w.cust AS cust_number,
       h.zipcode AS zipcode
  FROM fsm_m_wipmaster w,
       fsm_m_zipmaster z,
       fsm_m_housemaster h,
       fsm_m_custmaster c
 WHERE c.corp(+) = w.corp
   AND c.house(+) = w.house
   AND c.cust(+) = w.cust
   AND h.corp(+) = w.corp
   AND h.house(+) = w.house
   AND h.cust(+) = w.cust
   AND z.corp(+) = w.corp
   AND z.zipbeg IS NULL
   AND h.zipcode IS NOT NULL
   AND w.tech IS NOT NULL
ORDER BY w.corp;

変換後のクエリ

SELECT w.tech AS tech,
       w.wpcddate AS job_date,
       w.corp AS corp,
       w.house AS house_number,
       w.cust AS cust_number,
       h.zipcode AS zipcode
  FROM fsm_m_housemaster h
       LEFT OUTER JOIN
       fsm_m_custmaster c
      ON h.cust = c.cust
     AND h.corp_seq = c.corp_seq
     AND h.house = c.house
       LEFT OUTER JOIN
       fsm_m_wipmaster w
      ON h.cust = w.cust
     AND h.house = w.house
     AND h.corp_seq = w.corp_seq
       LEFT OUTER JOIN fsm_m_zipmaster z
      ON h.corp_seq = z.corp_seq AND z.zipbeg IS NULL
 WHERE w.tech IS NOT NULL
ORDER BY w.corp;

Query After 変換が前のクエリと同じ結果を返さない理由について、私は頭を悩ませているようです。私はここでばかげたことを見逃していることを知っています。

4

3 に答える 3

4

(+)元のクエリは、関連するテーブルのすべての条件で使用されていないため、単一の外部結合のみで構成されています。

したがって、新しい結合構文を使用した正しい書き直しは次のとおりです。

SELECT w.tech AS tech,
    w.wpcddate AS job_date,
    w.corp AS corp,
    w.house AS house_number,
    w.cust AS cust_number,
    h.zipcode as zipcode
FROM fsm_m_wipmaster w 
JOIN fsm_m_zipmaster z   ON z.corp = w.corp AND z.zipbeg is null
JOIN fsm_m_housemaster h ON h.corp = w.corp AND h.house = w.house AND h.cust = w.cust AND h.zipcode is not null
LEFT OUTER JOIN fsm_m_custmaster c  ON c.corp = w.corp AND c.house = w.house AND c.cust = w.cust
WHERE w.tech IS NOT NULL
ORDER BY w.corp;
于 2012-12-20T14:53:13.183 に答える