0

私には理解できない論理的なパズルがあります。

PK を表す 2 つの列を持つテーブルがあります。Prod と Prod_Color

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

日付は、それらの Prod がその日から利用できなくなったことを表しますが、再び利用可能になったときに日付を変更できます。

日付に基づいて行を制限できます。

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

しかし、私がする必要があるのは、除外で Prods と Prod_Colour の両方が結合されているサブクエリでこのテーブルを使用することです...

これは適切な説明ではありませんが、基本的に上記の例では、Prod_Colour = 'Red' である Prods Three と Prod_Colour = 'Blue' である Prods Two は除外されますが、Prod_Colour の日付が今日または null よりも大きい Prod_Colour の両方に Prods One が含まれます。

いつものように、アドバイスやヒントをいただければ幸いです。

前もって感謝します。

さらに明確にするために、いくつかの異なるテーブルから選択するクエリがあります。これらのテーブルの 1 つに、prods と prod_Colour (各行の一意の識別子として組み合わされたもの) が tableA で使用可能な場合にのみ、prod と prod_Colour を含める必要があります。それらは利用可能です。組み合わせは変わりませんが、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 に答える