我有一些我无法弄清楚的逻辑谜题.
我有一个表有两列代表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
Run Code Online (Sandbox Code Playgroud)
该日期再次表明那些Prods从该日期起不再可用,但是一旦再次可用,日期可以更改.
我能够根据日期限制行.
SELECT a.*
FROM TABLEA a
WHERE Date_ > '2012-06-11' or Date_ IS NULL
Run Code Online (Sandbox Code Playgroud)
但我需要做的是在子查询中使用此表,其中Prods和Prod_Colour在排除中合并...
这不是一个很好的解释,但基本上在Prods Three的例子中,其中Prod_Colour ='Red'和Prods Two,其中Prod_Colour ='Blue'将被排除,但Prods One将被包括在Prod_Colour中,其中date>今天或null.
一如既往,我感谢任何建议或提示.
提前致谢.
为了进一步澄清,我有一个从几个不同的表中选择的查询,其中一个表中我需要包含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)
Run Code Online (Sandbox Code Playgroud)
类似的东西.
基于您的上次编辑,您似乎正在寻找此构造:
SELECT *
FROM tableB
WHERE (prods, prod_colour) IN
(SELECT prods, prod_colour
FROM tablea a
WHERE date_ > tDate OR date_ is NULL);
Run Code Online (Sandbox Code Playgroud)