Country Tableを持っていない場合は、TableBからDISTINCT Countryを選択して派生させることができます。次に、国とカテゴリ間のデカルト結合(すべての可能な組み合わせ)のカテゴリでそれをクロス結合します。
SELECT countries.country, c.Category
FROM
(SELECT DISTINCT Country
FROM
@TableB) as countries
CROSS JOIN @Categories c
LEFT JOIN @TableB b
ON countries.Country = b.Country
AND c.Category = b.Cateogry
WHERE
b.Cateogry IS NULL
POSと国とカテゴリのすべての可能な組み合わせが実際に必要な場合。この場合、POSは販売店よりも店のようですが、同じ概念であるように思えます。あなたが持っていなければPOSテーブルを派生させ、国とカテゴリーのクロス・ジョインにクロス・シンクしてください。
SELECT
countries.country, c.Category, pos.POS
FROM
(SELECT DISTINCT Country
FROM
@TableB) as countries
CROSS JOIN @Categories c
CROSS JOIN (SELECT DISTINCT POS
FROM
@TableB) as pos
LEFT JOIN @TableB b
ON countries.Country = b.Country
AND c.Category = b.Cateogry
AND pos.POS = b.POS
WHERE
b.Cateogry IS NULL
しかし、私は、あなたはおそらく特定の国で利用可能なPOS年代にPOSのcombiantionsを制限したいので、必ずしもすべてのストアがすべての国であることを推測します。今度は、Countryを含めない場合はテーブルを派生させることができ、派生した国テーブルとそれを内部結合する場合もあります。使用
SELECT
countries.country, c.Category, pos.POS
FROM
(SELECT DISTINCT Country
FROM
@TableB) as countries
CROSS JOIN @Categories c
INNER JOIN (SELECT DISTINCT Country, POS
FROM
@TableB) as pos
ON countries.Country = pos.Country
LEFT JOIN @TableB b
ON countries.Country = b.Country
AND c.Category = b.Cateogry
AND pos.POS = b.POS
WHERE
b.Cateogry IS NULL
テストデータ:
DECLARE @Categories AS TABLE (Category VARCHAR(25))
DECLARE @TableB AS TABLE (Cateogry VARCHAR(25),POS CHAR(2), Country VARCHAR(25))
INSERT INTO @Categories VALUES ('Milk'),('Hot Sauces'),('Meat')
INSERT INTO @TableB VALUES ('Milk','DF','Mexico'),('Meat','DF','Mexico'),('Hot Sauces','DF','Mexico'),('Milk','CC','Canada'),('Milk','XX','Canada')
私は一例に – RARV
http://stackoverflow.com/questions/4602083/sql-compare-data-from-two-tables – FlavorScape
おかげで味をつけてみましょうが、それでもテーブルaとテーブルbが私の質問では列とレコードの量が異なるため、私のシナリオには答えません。 – RARV