この人頭いいなと思ったエピソード

SQL初心者です。
教えてください。

A表とB表があります。
A表の伝票Noの列の値とB表の伝票Noの列の値はイコールです。
判定はB表のある別のカラム(sample)と変数Zに格納されている値がイコールという
条件で合致するA表のデータを抽出したいです。
LEFT JOINもしくはINNER JOINなどを使って書けば良いのでしょうか?

例えば
SELECT * from A表 INNERJOIN B表 on A表.伝票No = B表.伝票No
where B表.sample = 変数Z
などと書けば良いのでしょうか?

A 回答 (1件)

こんにちは。



LEFT OUTER JOIN と INNER JOIN は少し差があります。
下記のSQLを実行して確認してみてください。

CREATE TABLE #TempTableA
(
Idx int
, DataA varchar(10)
)

CREATE TABLE #TempTableB
(
Idx int
, DataB varchar(10)
)

INSERT INTO #TempTableA
SELECT 1, 'A' UNION ALL
SELECT 2, 'B' UNION ALL
SELECT 3, 'C' UNION ALL
SELECT 4, 'D'


INSERT INTO #TempTableB
SELECT 1, 'Z' UNION ALL
SELECT 2, 'Y' UNION ALL
SELECT 4, 'X' UNION ALL
SELECT 5, 'V'


上記のSQLを利用してテーブル作成とデータを登録します。
その後、LEFT OUTER JOIN でIdx値が3のデータを抽出してみます。

SELECT A.Idx, A.DataA, B.DataB
FROM #TempTableA A LEFT OUTER JOIN #TempTableB B
ON A.Idx = B.Idx
WHERE A.Idx = 3

結果は下記のとおりです。
1件のデータが出ます。
ですが、#TempTableBテーブルにはIdxが3のデータがないのでnullのデータで表示されます。

IdxDataADataB
3CNULL

今回は、INNER JOINで実行してみます。
INNER JOINは両方のテーブルにデータが存在しないとデータが表示されません。

SELECT A.Idx, A.DataA, B.DataB
FROM #TempTableA A INNER JOIN #TempTableB B
ON A.Idx = B.Idx
WHERE A.Idx = 3

ですので、1件も表示されません。

LEFT OUTER JOIN と INNER JOINはこの差がありますので、
注意して適当なSQLを利用する必要があります。

    • good
    • 0
この回答へのお礼

解りやすく丁寧にご説明いただきありがとうございました。

お礼日時:2013/09/05 20:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す