以下所有表格都有一個「date_v_end
」字段,這是一個有效日期。只要它是NULL
這意味着它是當前的「良好」價值。SQL查詢,有效日期和連接:如何使其工作?
例如,要選擇表categorie
的當前值,我們可以簡單地執行SELECT * FROM categorie WHERE date_v_end IS NULL
。
我有3個表:
- 表
categorie
(英文類別) - 表 「一對多」
categorie_produit
(類別< =>產物爲英文) - 表
produit
(產品英文)
我想查詢當前的所有categories
以及他們的一對多produit
和我仍然需要一個結果即使該類別沒有產品(=沒有produit_categorie
行)。
之前具有「date_v_end
」字段我就是這麼做的:
SELECT
c.id AS c_id,
c.titre AS c_titre,
c.description AS c_description,
cp.id_categorie AS cp_id_categorie,
cp.id_produit AS cp_id_produit,
p.id AS p_id,
p.titre AS p_titre,
p.description AS p_description
FROM categorie_produit cp
LEFT OUTER JOIN categorie c
ON c.id=cp.id_categorie
LEFT OUTER JOIN produit p
ON p.id=cp.id_produit
ORDER BY c_id,p_id;
它的工作就像一個魅力。現在我試圖用新的「date_v_end
」字段修改查詢。我已經添加了三個條款WHERE c.date_v_fin IS NULL AND cp.date_v_fin IS NULL AND p.date_v_fin IS NULL
。你去那裏:
SELECT
c.id AS c_id,
c.titre AS c_titre,
c.description AS c_description,
cp.id_categorie AS cp_id_categorie,
cp.id_produit AS cp_id_produit,
p.id AS p_id,
p.titre AS p_titre,
p.description AS p_description
FROM categorie_produit cp
LEFT OUTER JOIN categorie c
ON (c.id=cp.id_categorie AND c.date_v_fin IS NULL)
LEFT OUTER JOIN produit p
ON (p.id=cp.id_produit AND p.date_v_fin IS NULL)
WHERE cp.date_v_fin IS NULL
ORDER BY c_id,p_id;
這個工程除了在一種情況下罰款:當有一個categorie_produit
和其「date_v_end
」是不NULL
:加入這個該死的「date_v_end
」字段中,我得到了一個前行填充了c_id,c_titre和c_description,其他字段爲NULL
(cp_id_categorie
,cp_id_produit
, p_id
,p_titre
,p_description
)。現在沒有結果。
我真的不知道如何修改我的查詢來使其工作。任何想法?
難道你不希望該行反正,因爲它是無效的?或者你甚至沒有得到'正確'的行?除此之外,不會將與WHERE子句的比較添加到「INNER JOIN」(有效地) - 將「cp.date_v_fin」和「p.date_v_fin」檢查移到它們各自的「JOIN」子句中怎麼辦? – 2012-04-23 15:38:34