0

我有一个我无法弄清楚的逻辑难题。

我有一个表,其中两列代表一个 PK。Prods 和 Prod_Colour

TableA
Prods, Date_, Prod_Colour

One  |  null     |  Red
One  |  null     |  Blue
Two  | 2012-06-08| Blue
Two  |   null    | Yellow
Three|   null    | Green
Three| 2012-06-08| Red

该日期表示这些产品从该日期起不再可用,但是一旦再次可用,可以更改日期。

我能够根据日期限制行。

SELECT a.*
FROM TABLEA a
WHERE Date_ > '2012-06-11' or Date_ IS NULL

但我需要做的是在子查询中使用此表,其中 Prods 和 Prod_Colour 在排除项中组合...

这不是一个很好的解释,但基本上在上面的示例中,Prod_Colour = 'Red' 的 Prods 3 和 Prod_Colour = 'Blue' 的 Prods 2 将被排除,但 Prod_Colour 的日期大于今天或 null 的 Prods One 将包括在内。

一如既往,我感谢任何建议或提示。

提前致谢。

为了进一步澄清,我有一个从几个不同的表中选择的查询,在其中一个表中,我需要包含 prods 和 prod_Colour 仅当 prods 和 Prod_Colour(组合为每一行的唯一标识符)在 TableA 中可用时,其中 date_ 表示它们是可用的。组合不会改变,但 date_ 可以。我会使用 tDate 来表示今天作为比较的日期。

Select O.Prods, O.Prod_Colour /*each combination needs to match the combination in TableA */
FROM TableB
Where O.Prods + O.Prod_C in (Select A.Prods + A.Prod_Colour
                             FROM TABLE A WHERE Date_ IS NULL or Date_ > tDate)

类似的东西。

4

2 回答 2

7

根据您上次的编辑,您似乎正在寻找这个构造:

SELECT *
  FROM tableB
 WHERE (prods, prod_colour) IN
       (SELECT prods, prod_colour
          FROM tablea a
         WHERE date_ > tDate OR date_ is NULL);
于 2012-06-12T17:47:38.040 回答
0
SELECT a.*
FROM TABLEA a
WHERE (Date_ > '2012-06-11' or Date_ IS NULL)
AND not (Prods = 'Two' and Prod_Colour = 'Blue')
AND not (Prods = 'Three' and Prod_Colour = 'Red')
于 2012-06-12T17:14:42.003 回答