- ベストアンサー
SQL文の書き方について
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 などと書けば良いのでしょうか?
- みんなの回答 (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のデータで表示されます。 Idx DataA DataB 3 C NULL 今回は、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を利用する必要があります。
お礼
解りやすく丁寧にご説明いただきありがとうございました。