以下 3 个表格都有一个“ date_v_end
”字段,即有效日期。只要它是NULL
这意味着它是当前的“好”值。
例如,要选择表的当前值,categorie
我们可以简单地执行SELECT * FROM categorie WHERE date_v_end IS NULL
.
我有 3 张桌子:
- 一张桌子
categorie
(英文分类) - 一个表“一对多”
categorie_produit
(类别 <=> 英文产品) - 一张桌子
produit
(英文产品)
我想查询所有current 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;
这可以正常工作,除非在一种情况下:当有 acategorie_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
我真的不知道如何修改我的查询以使其正常工作。任何想法?