[英]Left Outer Join doesn't seem to work properly
我得到了這段sql server 2005代碼:
SELECT DT, a.id_uf, hora
FROM CALENDAR c LEFT OUTER JOIN CLIENT_MEDIDAS_COGEN a ON a.fecha_oferta = dt AND a.hora = c.H
WHERE
(id_tipo_medida IN (6, 1)) AND (id_magnitud = 1)
AND (DT BETWEEN '10/01/2013' AND '10/01/2013') AND (id_tipo_fact = 3)
ORDER BY DT, a.id_uf, a.hora
在日歷上,我有這樣的東西:
在CLIENT_MEDIDAS_COGEN上,我得到了以下信息:
最后,這是我得到的結果:
問題是,怎么可能在第一個小時和第二個小時沒有得到行? 我正在使用LEFT OUTER JOIN,但似乎無法正常工作。
提前非常感謝您的幫助
您的WHERE
子句指出(id_magnitud = 1)
。 Calender
中任何未連接到CLIENT_MEDIDAS_COGEN
的id_magnitude
列中將為NULL
。
SELECT
c.DT,
a.id_uf,
c.hora
FROM
CALENDAR c
LEFT OUTER JOIN CLIENT_MEDIDAS_COGEN a ON a.fecha_oferta = dt AND a.hora = c.H
WHERE
(c.DT BETWEEN '10/01/2013' AND '10/01/2013')
AND (COALESCE(a.id_tipo_medida, 1) IN (6, 1))
AND (COALESCE(a.id_magnitud, 1) = 1)
AND (COALESCE(a.id_tipo_fact, 3) = 3)
ORDER BY
c.DT, a.id_uf, a.hora
另外,不要只對通用列使用表別名。 將它們用於所有列,以便清楚地知道列的位置。
根據MatBaille的評論,將CLIENT_MEDIDAS_COGEN上的過濾器CLIENT_MEDIDAS_COGEN
join子句會更好。 上面的合並陳述僅表示您問題的原因。 以下可能會表現更好。
SELECT
c.DT,
a.id_uf,
c.hora
FROM
CALENDAR c
LEFT OUTER JOIN CLIENT_MEDIDAS_COGEN a ON
a.fecha_oferta = dt
AND a.hora = c.H
AND (a.id_tipo_medida IN (6, 1))
AND (a.id_magnitud = 1)
AND (a.id_tipo_fact = 3)
WHERE
(c.DT BETWEEN '10/01/2013' AND '10/01/2013')
ORDER BY
c.DT, a.id_uf, a.hora
這是因為過濾器使它像內部聯接一樣工作。 您可以將過濾器移至加入條件的位置,如下所示:
SELECT c.ID, a.id_uf, c.H
FROM CALENDAR c LEFT OUTER JOIN CLIENT_MEDIDAS_COGEN a ON a.fecha_oferta = dt AND a.hora = c.H
AND
(a.id_tipo_medida IN (6, 1)) AND (a.id_magnitud = 1) AND (a.id_tipo_fact = 3)
WHERE (DT BETWEEN '10/01/2013' AND '10/01/2013')
ORDER BY DT, a.id_uf, a.hora
這將產生所需的左連接效果。
Cleaner(我認為)是在LEFT OUTER JOIN之前使用子查詢將條件應用於聯接中的右表。
變成...
SELECT c.ID, a.id_uf, c.H
FROM CALENDAR c
LEFT OUTER JOIN
(
SELECt id_uf, hora, fecha_oferta
FROM CLIENT_MEDIDAS_COGEN a
WHERE (id_tipo_medida IN (6, 1)) AND (id_magnitud = 1) AND (id_tipo_fact = 3)
) a ON a.fecha_oferta = dt AND a.hora = c.H
WHERE (DT BETWEEN '10/01/2013' AND '10/01/2013')
ORDER BY DT, a.id_uf, a.hora
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.