2016-10-10 24 views
1

に不一致項目を決定します。私はこれに似たテーブルを持っている設定

#1 
OriginalID | Area 
========== | ==== 
2   | Abdomen 
3   | Abdomen 

#2 
Area | Part 
==== | ==== 
Abdomen| Abdomen 
Bottom | Bottom 


#3 
Part | OriginalID 
==== | ========== 
Abdomen| 2 
Bottom | 3 

望ましい結果

OriginalID | Area | Part 
========== | ==== | ==== 
3   | Abdomen | NULL 

私は私がテーブルを更新することができ、上記把握したら

#3 
Part | OriginalID 
==== | ========== 
Abdomen| 2 
Bottom | 3 
Abdomen| 3 

希望の結果を得るために、私はそれが当初assig 50にする(表#1)が、表#3にその特定のAreaの対応関係はありません。

ここで、#1Areaが同じID#3に関連付けられていないかどうかを調べたいと思います。 #3は、IDPartの多対多の関係です。 Areaは今や独自のテーブルに振り出されました。しかし、それは#1に保存されています。残念ながら、まだ使用されていましたが、#1Areaの関係を修正するためにいくつかのコードをリファクタリングするようになりましたので、#2に適切に移植されていません。

#2多対多の関係は、AreaPartの間にありますか。

Areaの関係は、SQLのある#3では説明されていません。それはコンピュータが私のためにそれを行うことがいいですが、私はかなりこれが行われる方法について私の頭を包むことはできません。

ありがとうございます!

は、ここでいくつかのテストデータ

CREATE TABLE #1 
(
    OriginalID INT NOT NULL, 
    Area VARCHAR(50) NOT NULL 
) 

CREATE TABLE #2 
(
    Area VARCHAR(50) NOT NULL, 
    Part VARCHAR(50) NOT NULL 
) 

CREATE TABLE #3 
(
    Part VARCHAR(50) NOT NULL, 
    OriginalID INT NOT NULL 
) 

INSERT INTO #1 VALUES 
    (2, 'Abdomen'), 
    (3, 'Abdomen') 

INSERT INTO #2 VALUES 
    ('Abdomen', 'Abdomen'), 
    ('Bottom', 'Bottom') 

INSERT INTO #3 VALUES 
    ('Abdomen', 2), 
    ('Bottom', 3) 

DROP TABLE #1 
DROP TABLE #2 
DROP TABLE #3 

ジェイソンの応答がNULL結果で

SELECT a.Area 
FROM #1 AS a 
WHERE NOT EXISTS (
    SELECT * 
    FROM #2 as b 
    INNER JOIN #3 as c 
    ON b.Part = c.Part 
    WHERE a.Area = b.Area) 

結果、現在間違っています。

+1

サンプル・データ、所望の結果は、あなたが何をしたいのか説明するのに役立つでしょう。 –

+0

それで#1の行を#3にない行を表示したいのですか? –

+0

@GordonLinoffよろしくお願いします。 – Jon49

答えて

1

#3にされていないあなたを与えるだろう。

SELECT a.originalID, b.part 
from #1 a 
join #2 b 
on a.area = b.area 
where not exists (select * from #3 c where c.originalID = a.originalID and c.part = b.part) 
+0

これは実際に余分なデータを生成しています。しかし、私が求めていたことをしたので、正しいものとしてマークします。 – Jon49

0

説明に基づいて、これが役立つかどうかを確認してください。以下は

Select table1.OriginalID, table1.Area, table3.Part 
From table1 
Left Join table3 on table1.OriginalID = table3.OriginalID 
Where table3.OriginalID is null 
+0

これは、 'Area3 'が' table3'で呼び出されていないことを示しています。しかし、 'table1'に項目がありますが、' table3'の特定の 'Area'に対応するものがない場合は表示されません。それが意味をなさない場合: – Jon49

+0

実際のコードが失敗したことを示すために例を更新しました。それを台無しにして不明瞭になって申し訳ありません。 – Jon49

1
SELECT a.Area 
FROM table1 AS a 
WHERE NOT EXISTS (SELECT * 
FROM table2 as b 
INNER JOIN table3 as c 
ON table2.part = table3.part 
WHERE a.Area = b.Area) 
+0

私はあなたのことを試して、それは空白になるだけです。私はOPにコードを載せます。 – Jon49

関連する問題