如何在Oracle中的表中将两列与两列的组合进行比较?

时间:2012-06-12 17:04:53

标签: sql oracle

我有一些我无法弄清楚的逻辑谜题。

我有一个表有两列代表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在排除中合并...

这不是一个很好的解释,但基本上在Prods Three的例子中,其中Prod_Colour ='Red'和Prods Two,其中Prod_Colour ='Blue'将被排除,但Prods One将被包括在Prod_Colour中,其中date是>比今天还是空。

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

提前致谢。

为了进一步澄清我有一个从几个不同的表中选择的查询,其中一个表中我需要包括prods和prod_Colour只有在表A中有prods和Prod_Colour(组合作为每行的唯一标识符)的地方其中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)
这样的事情。

2 个答案:

答案 0 :(得分:7)

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

SELECT *
  FROM tableB
 WHERE (prods, prod_colour) IN
       (SELECT prods, prod_colour
          FROM tablea a
         WHERE date_ > tDate OR date_ is NULL);

答案 1 :(得分: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')