SELECT DISTINCTとWHEREによるテーブル結合の方法

このQ&Aのポイント
  • テーブルAから、右2文字の重複しないテーブルBをつくり、さらにさらにテーブルBとも重複しない左2文字のテーブルCをつくりたい。
  • INSERT INTO テーブルB (F1) SELECT DISTINCT Left([F00],2) AS F1 FROM テーブルA でテーブルAの右2文字の重複しないテーブルBを作成します。
  • INSERT INTO テーブルC (F1) SELECT DISTINCT Right([F00],2) AS F1 FROM テーブルA,テーブルB WHERE テーブルB.F1<>Right(テーブルA.F00,2) でテーブルBとも重複しない左2文字のテーブルCを作成します。
回答を見る
  • ベストアンサー

SELECT DISTINCTとWHERE

アクセス2010 テーブルAから、右2文字の重複しないテーブルBをつくり、さらにさらにテーブルBとも重複しない左2文字のテーブルCをつくりたい。 テーブルA [F00] ABCD ABAB EFGH IJGH INSERT INTO テーブルB (F1) SELECT DISTINCT Left([F00],2) AS F1 FROM テーブルA  テーブルB [F1] AB EF IJ (うまくいきました) INSERT INTO テーブルC (F1) SELECT DISTINCT Right([F00],2) AS F1 FROM テーブルA,テーブルB WHERE テーブルB.F1<>Right(テーブルA.F00,2)  (うまくいきません) 下記のようにしたいのですが。 テーブルC [F1] CD GH

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

INSERT INTO テーブルC (F1) SELECT DISTINCT Right([F00],2) AS F1 FROM テーブルA LEFT JOIN テーブルB ON テーブルB.F1 = Right(テーブルA.F00,2) WHERE テーブルB.F1 Is Null; あるいは、 INSERT INTO テーブルC ( F1 ) SELECT DISTINCT Right([F00],2) AS F1 FROM テーブルA WHERE Right([F00],2) Not In (SELECT F1 FROM テーブルB); ということかな?

situmonnsya
質問者

お礼

>WHERE Right([F00],2) Not In (SELECT F1 FROM テーブルB); のほうが私には理解しやすかったです。 希望の結果をだせました。ありがとうございます。

関連するQ&A

  • SELECT DISTINCT の使いかた

    テーブル名にA1,A2,A3と言う列がありA1内の列の重複を省き 結果をA1,A2,A3全て表示したいのですが方法がわかりません。 どなたかHELP お願いします。 SELECT DISTINCT A1 FROM テーブル

  • oracle9i distinct

    select distinct 1 as aaa, bbb from table_a aaa     bbb -------------------------- 1      a 1      b 1      c この場合の「distinct 1」というのは table_aの1列目でdistinctするという 意味でいいのでしょうか? でもdistinct 2 とすると、aaaの列の値が2になるだけなのですが・・。 すみませんがdistinct 1 の意味を教えていただけますでしょうか。

  • Select Distinctについて

    SQL文の質問です。フィールドがTable1に100つあるとします。 select distinct XYZ From Table1という文があるとします。 これだとXYZのフィールドしか参照していないことになると思います。 そうではなくて、他の99フィールドの値も参照(データにアクセスしたい)したいと思っています。 select distinct XYZ, * From Table1とSelect * from Table1みたいなことをやりましたがエラーが発生しました。他の99フィールドを参照する方法はあるでしょうか?

  • WHERE句に複数テーブルを使いたい

    アクセス2010です。 テーブルA F1__テキスト(重複あり) F2__数字 テーブルB F1__テキスト(重複なし) F2__Boolean 条件 ・テーブルAのF2が1の条件で ・テーブルAのF1にテーブルBのF2がない ・テーブルBのF2がTrueであるものだけ DoCmd.RunSQL INSERT INTO テーブルA(F1,F2) SELECT テーブルB.F1,100 FROM テーブルB WHERE テーブルA.F2 = 1 And テーブルA.F1<>テーブルB.F1 And テーブルB.F2 = True; WHERE句に複数テーブルを使いたい時は、どのようにするのでしょうか?

  • SELECT DISTINCTの結果件数をCOUNTする方法

    SQL SERVER 2005 EXPRESS のストアドプロシージャで、 SELECT結果の件数を、変数 @count に取得したいのですが DISTINCTの引数が複数あるのが原因なのか、上手くいきません。 目的はテーブル「TBL」から、COMとUSERの組み合わせの リストを抽出し、その件数を取得する事です。 テーブル名:TBL COM  USER --------------- 001  A 002  A 003  A 001  B 002  A 003  C 「COMとUSERの組み合わせで、重複するものは取らない」のならば  SELECT DISTINCT COM,USER  FROM TBL で、下記のような結果が得られます。 COM  USER --------------- 001  A 002  A 003  A 001  B 003  C で、この結果件数である「5」を取りたいのですが DECLARE @count int  SELECT @count = COUNT(DISTINCT COM,USER)  FROM TBL print @count と打っても失敗します。 ( )の括りやCOUNTの位置をいろいろと試したが出来ませんでした。 COUNT DISTINCT(複数項目)が出来ないのならば、 どうすればこの結果の件数を取得できるでしょうか? どうかご教授授くださいませ。よろしくお願いします。

  • distinct をexistsに変換する

    distinctをexistsに変換した方がパフォーマンスが良いようで、 例えば以下の例があるとします ---------------------------------- (前)SELECT DISTINCT a.ID1, a.NAME1 FROM TABLE1 a, TABLE2 b WHERE a.ID1 = b.ID2 (後)SELECT a.ID1, a.NAME1 FROM TABLE1 a    WHERE EXISTS ( SELECT 'X' FROM TABLE2 b WHERE a.ID1 = b.ID2) ---------------------------------- もっと複雑なSQLの場合、EXISTSに変換できるのでしょうか?。複雑なSQLとは、 「複数のテーブルからカラムを取得」「テーブル結合が2つ以上」「外部結合」 などのSQLで、以下に例を示します。 (例)SELECT DISTINCT a.ID1,a.NAME1,b.ID2,b.NAME2,c.ID3,c.NAME3    FROM TABLE1 a,TABLE2 b,TABLE3 c    WHERE a.ID1 = b.ID1(+)      AND a.ID1 = c.ID1(+)

  • Insert Into Select での重複について

    DB:SQLServer2000 こんにちは お世話になっております。 トランザクションのテーブルA から ワークのテーブルBへInsert Into Select を使用してデータを格納しているのですが、その際に重複が発生してしまいます。 テーブルA 主キーあり テーブルB 主キーなし Delete B Insert into B select 項目1,項目2,・・・ from A With(Nolock) where 日付項目 = 20080101 テーブルAの主キー項目は全てテーブルBへInsertしており、Insert完了後のテーブルBの中身を見ると、まれに全く同じデータが2件出来ていることがあります。 このInsert into selectが実行されている間に、テーブルAに対して登録更新が行われることもあります。 色々と試してはいるのですが、原因が特定できずに困っております。 もし何かお気づきになられる方がいらっしゃいましたら、ご教示下さい。 よろしくお願い致します。

  • accessでDISTINCT 句と矛盾

    IIFで置き換えをした結果をソートしようとしましたが、 SELECT DISTINCT a,IIF(IsNull(b), 0, 1) AS c FROM shain ORDER BY a,c [Microsoft][ODBC Microsoft Access Driver] ORDER BY 句 (c) が DISTINCT 句と矛盾しています。 というエラーになりました。 正しいSQLを教えてください。 SELECT DISTINCT a,IIF(IsNull(b), 0, 1) AS c FROM shain ORDER BY a,b も試しましたが同じようにエラーになりました。

  • SQLのこと:distinctして並び替えたい

    select * from (select distinct on (aaa) * from bbb) as ccc order by ddd テーブルbbbのaaaというフィールドが重複せず、しかも他のフィールドで並び替えをしたかったら、このような書き方以外ありますか?データベースはPostgreSQLです。 この書き方で不都合が出ているというわけではありませんが、どう書けば、パフォーマンス的にも良いSQLになるか、詳しい方がいらっしゃいましたら、お願いします。

  • SQL文「DISTINCT」の「ORDER BY」について

    SQL文「DISTINCT」の「ORDER BY」について教えて下さい。 A列をDISTINCTで重複行の排除をしています。 その後、B列でORDER BYをかけたいのですが、エラーが 出てしまいます。A列でのORDER BYは成功します。 何か良い方法があれば教えて下さい。 よろしくお願いします。 SQL="SELECT DISTINCT A列 from table " &_ "WHERE (table.C列='100') " &_ "ORDER BY (table.B列) ASC " ⇒エラー    "ORDER BY (table.A列) ASC " ⇒成功