• ベストアンサー

こちらのテーブルにあってこちらのテーブルにないIDを抽出するSQL

お世話になってます MySQLでデータを格納しております。 以下のようにUserTable,Userinfoという2つのテーブルがあったとします。 ■UserTable -ID(key) -username ■Userinfo -ID(key) -user_info1 -user_info2 UserTableはユーザID作成時に自動でレコードが生成されます。 登録されたユーザは自分の情報を自分自身で登録することにより Userinfoテーブルにレコードが生成されます。 ここで、ユーザIDを作成したユーザのうち、自分の情報を登録していない ユーザIDを抽出したいのですが、この場合、どのようなSQLを書けばよいのでしょうか・・・? ユーザIDが、UserTableにあって、UserInfoにない、というものを作ればよいのですが・・・ SQLだけじゃ無理でしょうか・・・?

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

最近これと同じ質問が多いですが、はやっているのでしょうか? SELECT UT.ID FROM UserTable AS UT LEFT JOIN Userinfo IS UI USING(ID) WHERE UI.ID IS NULL

kbr
質問者

お礼

ありがとうございました。 ただレンタルサーバ(さくら)のMysqlが4.0.2.Xで、 サブクエリに対応していないようなのです。 何度やってもSyntaxErrorがでるので調べてみたら、 4.1からのようですね・・・ left join で無事できました!ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

MySQLのバージョンやEXPLAINの結果を見て、以下のような方法を使います。 (1)not existsを使う select `ID` from UserTable as x where not exists (select * from Userinfo as y where x.`ID`=y.`ID`) (2)not inを使う select `ID` from UserTable where `ID` not in(select `ID` from Userinfo) (3)outer joinを使う select x.`ID` from UserTable as x left join Userinfo as y on x.`ID`=y.`ID` where y.`ID` is null

kbr
質問者

お礼

ありがとうございました。 ただレンタルサーバ(さくら)のMysqlが4.0.2.Xで、 サブクエリに対応していないようなのです。 何度やってもSyntaxErrorがでるので調べてみたら、 4.1からのようですね・・・ left join で無事できました!ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Visual C#でSQLのテーブルを読み込む方法を教えてください。 

    Visual C#でSQLのテーブルを読み込む方法を教えてください。 (超初心者です。) SQLのテーブルは下記の通りです。 userid username busho nyushabi 111111 ユーザー1 11111 20100401 222222 ユーザー2 22222 20100401 333333 ユーザー3 33333 20100401 … C#のフォームで、ユーザーID・ユーザー名を入力し、検索ボタンをクリックすると、 検索結果として該当するユーザーID・ユーザー名・部署・入社日が 各1つのテキストボックスに表示されるようにするには、 検索ボタンイベントにどういうプログラムの記述をすればよいのでしょうか。 読み込みはユーザーIDの昇順で、該当者先頭1件の情報を表示だそうです。 説明にはユーザーID・ユーザー名をKEYにして読み込むとあったのですが、 KEYとはなんですか? あと、フォームの部品にラジオボタンで表示・非表示があり、 説明にflgがどうとかあるのですが、どう使用するものなのでしょうか。 全く分からないので宜しくお願いします。

  • ユーザ情報を格納するテーブルについて

    MySQLバージョン4.1.16を使用しています。 基本となるユーザ情報を格納するテーブルで、 自動インクリメントされるidというカラムを使用する場合と、 使用しない場合とでは、どちらが良いというのはあるのでしょうか? みなさんはどちらの形で利用しているのでしょうか? [userinfoテーブル] id使用 id UNSIGNED AUTO_INCREMENT PRIMARY KEY user_id VARCHAR(12) UNIQUE password TINYTEXT [userinfoテーブル] id使用しない user_id VARCHAR(12) PRIMARY KEY password TINYTEXT

    • ベストアンサー
    • MySQL
  • 3つのテーブルからの抽出SQL

    表1・・・商品ID 表2・・・商品ID、賞味期限、価格ID 表3・・・価格ID、商品価格 このような表があるとします。 ここで、商品価格ごとにもっとも賞味期限の古い商品IDを表示させてい場合、どのようなSQL文を書けばよいでしょうか? また、オラクル8でお願いします。 例題となるテーブルとレコードが紛らわしいですが、よろしくお願いいたします。

  • SQLで二つのテーブルを統合したい

    お世話になります。 Access2000のSQLで質問させて下さい。 下記のAとBのテーブルがある状態で、二つを統合した Cを生成したいのですが、どのようにSQLを作成したらよいでしょうか? お手数でもうしわけございませんが、SQL文で回答頂ければ助かります。 --テーブルA--- ID 名前 11 やまだ 12 さかもと --テーブルB--- ID 名前 25 きのした 26 つちや --C-- ID 名前 11 やまだ 12 さかもと 25 きのした 26 つちや

  • SQL文でのデータの取得が上手くいきません

    初めて質問させていただきます。 こちらのカテゴリで良いのか分からなかったのですが、よろしくお願いいたします。 SQL文を作成しているのですが、上手くいかず困っている状況です。 要件としてはテーブルAにユーザーの情報が格納されているのですが、 キーの一つとして世代(SEDAI_NO)(日付)を持っております。 今回取り出したいデータは該当ユーザーの処理日以前の最新のデータを 取得したいと思い以下のSQL文を作成しましたが、上手く行かず、最新世代を含むそれ以前の世代のデータを取得してきています。 どこがおかしいのでしょうか? よろしくお願いいたします。 【作成したSQL】 select * from テーブルA テーブルA’ where (USER_ID=該当のユーザーID) and (SEDAI_NO = (select max(SEDAI_NO) from テーブルA where SEDAI_NO = テーブルA’.SEDAI_NO AND 処理日 >= テーブルA'.SEDAI_NO)

  • SQL文(テーブル作成)に関する質問です

    SQL文についての質問です。仕様にあわせたテーブルを作ろうとしていますが、何故... SQL文についての質問です。 仕様にあわせたテーブルを作ろうとしていますが、何故かエラーが出ます。 どのように書けばいいんでしょうか? どなたか教えて下さい。 以下がSQL文です。 mysql> CREATE TABLE Syain -> ( user_id char(10) NOT NULL ← ユーザーID:半角英数字記号文字 10桁(固定) 自動発番 -> username varchar(250) ←ユーザー名:最大250文字まで登録可能 -> user_Yomi varchar(250) ←読み仮名:最大250文字まで登録可能 -> email varchar(250) NOT NULL ←e-mail:250文字まで登録可能 @必須 -> renrak varchar(250) ←連絡先:250文字まで登録可能 -> Yubin varchar(8) NOT NULL ←郵便番号:必須 8桁 -> Adress varchar(10) ←住所:500文字(半角換算)真で登録可能。 -> PRIMARY KEY(user_id)); ←このuser_idはプライマリキーになる。 また、以下がエラーです。 ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'usern ame varchar(250) user_Yomi varchar(250) email varchar(250) NOTNULL renrak v' at line 3 よろしくお願いします。

  • 3つのテーブルを結合させたSQL文について

    3つのテーブルを結合させたSQL文について作成方法を教えてください。 よろしくお願いいたします。 【テーブル構成】 テーブル名---項目名/項目名・・・です。 tblA---id/del_flg/name tblB---id/del_flg/add tblC---id/del_flg/family 各テーブルはidによりリンクされます。 tblAのdel_flgは在籍者=0 退職者=1で、一人1レコードです。 tblBでは住所管理をしています。 旧情報を残したいので、更新時には新たにdel_flg=0でレコードを作成し、既存レコードはdel_flg=1に更新します。 tblCは、既婚者のみ作成されるレコードです。 つまり、tblBとtblCは、レコードが存在しない、あるいはdel_flg=0のみ、del_flg=0とdel_flg=1が混在 のどれかのパターンになります。 【やりたいこと】 いま、これらすべてのテーブルを全部つなげて、在籍している人の情報だけ集めたいのです。 tblAからはdel_flg=0のレコードをすべて取得したうえで、tblBとtblCにdel_flg=0のレコードがあればその情報も取得したい。 【経過】 select * from (tblA inner join tblB on tblA.id = tblB.id ) inner join tblC on tblA.id = tblC.id とりあえずwhere条件をつけなくても、tblCに存在している人しか取得ができないのです。 where条件も含めて、上記条件のもと、希望するようなSQLの組み立て方をご教授ねがいたいのでよろしくお願いいたします。 できれば、早目の回答が希望です。

    • ベストアンサー
    • MySQL
  • 1つのSQLで2段階の抽出を行いたい

    恐らくそれほど複雑なSQLではないと思いますが、中々SQLが作成できず困っています。 回答いただければ嬉しいです。 以下のテーブルがあったと仮定します。 テーブル名:  売上げ明細 カラム:  ・商品ID … 売上げ明細なので一意ではありません  ・単価 … 同じ商品IDでも、レコードによって単価は異なります  ・数量 … 1~5の整数のみとします 実際のデータは以下の通りです。 商品ID,単価,数量 1001,50,2 1001,60,5 1002,90,3 1003,60,5 1003,80,4 1003,90,1 1004,60,3 上記データを以下の通り抽出するには、どのようなSQLを組めばいいでしょうか? 1.まず各商品IDの中から単価が最大のレコードだけを取り出す 商品ID,単価,数量 1001,60,5 1002,90,3 1003,90,1 1004,60,3 2.次に数量でgroup by して、件数をカウントする 数量,件数 1,1 3,2 5,1 1つのSQL文で2の結果が得られれば、途中の抽出条件は特に問いません。 ちなみにMySQL5を使っています。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • SQLの書き方

    はじめまして SQL Serverを使用していますが、下記のSQLの書き方がわかりません。 申し訳けありませんが、わかる方がいらっしゃいましたら、どなたか教えて下さい。 ◆質問 テーブル1とテーブル2の下記のKEYで結合させて、取り出した結果でテーブル3を更新したいです。 テーブル2はデータが複数件一致してしまうため、無条件に先頭の1レコードだけを取り出したいです。 取得できたテーブル2のid_1とid_2とid_3をテーブル3に書き出したいです。 ○KEY テーブル1.test = テーブル2.test and テーブル1.test1 = テーブル2.test1 テーブル1.id_2 = テーブル3.id_1 and テーブル1.id_3 = テーブル3.id_2 ○テーブル1 id_1   id_2   id_3   test   test1 bbb   000001   001   000001  100 bbb   000002   001   000002  100 ○テーブル2 id_1   id_2   id_3   test   test1 aaa    1    99    000001   100 ← このレコードを取り出したい aaa    2    99    000001   100 aaa    3    99    000003   100 aaa    4    99    000004   110 ○テーブル3 id_1   id_2   id_3 000001  001  aaa-1-99   ←id_3にテーブル2で取得できたid1 + id2 + id3を書き出したい 000002  001 夜遅くにすみませんがお願いします。

  • SQLの書き方について

    (1)の様なテーブルから結果を(2)の様にしたいのですが どのようなSQLを書いたら表示できるのかわかりません。 アドバイスなどをお願い致します。 (新たにView等を作成するなどでもかまいません。) (1)dept_id / item_id / day / time (カラム) 1111 / 0001 / 20090101 / 60 (レコード1) 1111 / 0001 / 20090102 / 30 (レコード2) 1111 / 0002 / 20090101 / 40 (レコード3) 1112 / 0001 / 20090101 / 30 (レコード4) (2)dept_id / item_id / time1 / time2 1111 / 0001 / 60 / 30 1111 / 0002 / 40 / 1112 / 0001 / 30 /

このQ&Aのポイント
  • SPD-SX PRO (およびSPD-SX PRO APP)で44.1kHz / 32bitのwavファイルをインポートしようとすると、[import error]というエラーが表示され、インポートができません。
  • 以前入れたことのあるwavファイル(1411 kbps)では問題なく実行できるため、問題は44.1kHz / 32bitのwavファイルにありそうです。
  • 原因として考えられるのは、SPD-SX PRO (およびSPD-SX PRO APP)が44.1kHz / 32bitのwavファイルに対応していない可能性があります。
回答を見る