MySQLで差集合を2重で使うには?

このQ&Aのポイント
  • MySQLを使用して、参加していないかつ参加予約していないグループの表を取得する方法を教えてください。
  • テーブル「grp」、「belong」、「reserve」を使用して、参加していないかつ参加予約していないグループの表を作成します。
  • テーブル「grp」、「belong」、「reserve」を結合し、ユーザIDに関連付けられていないグループを取得し、さらに参加予約しているグループを除外します。
回答を見る
  • ベストアンサー

MySQLで差集合を2重で使うには?

以下の3つのテーブルがあります。 レコードも一緒に示しておきます。 grp:グループ名(と管理者)  name(グループ名)、admin(管理者ID) belong:各グループの所属名簿  grp(グループ名)、user(所属ユーザのID) reserve:グループ参加予約中ユーザのリスト  grp(グループ名)、user(申込みをしたユーザのID) ここで、あるユーザIDに対し、 「参加も参加予約もしていないグループ」の表を取り出したいのです。 id001が参加していないグループの表は以下のSQL文でできました。 SELECT grp.name FROM grp LEFT JOIN belong ON grp.name = belong.grp WHERE belong.user != "id001"; この表からさらに参加予約しているグループを排除するにはどうすればいいでしょうか? お願いします。

  • mokpok
  • お礼率62% (154/245)
  • MySQL
  • 回答数1
  • ありがとう数1

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

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

具体的な例がないので希望がわかりませんが、普通に SELECT grp.name FROM grp LEFT JOIN belong ON grp.name = belong.grp LEFT JOIN reserve ON grp.name = reserve.grp WHERE 1 AND belong.user != "id001" AND reserve.user != "id001" みたいな感じでどうでしょう?

mokpok
質問者

お礼

回答ありがとうございます。 LEFT JOIN はそのようにして2つ付けられるのですね。 おかげさまで解決できました。 ありがとうございました。

関連するQ&A

  • <AD>グループメンバー 一覧 コマンド

    Windows Server 2003 のActive Directoryを使用して、ユーザ管理をしています。 グループに所属しているメンバを調べるのに以下のコマンドを使用しています。 dsquery group -name グループ名 | dsget group -members | dsget user -display -samid このコマンドの出力結果の1行1行の先頭にグループ名を追加表示させて、 以下のような出力イメージしたいと思います。 グループ名 ユーザID ユーザ氏名 そして、このコマンドではグループのメンバにグループがいると 途中で停止してしまいます。 この場合はどのように対応すれば宜しいでしょうか? すみませんが、お願いします。

  • Windowsの権限について

    Windowsの権限がややこしく困り果てています。 一般的にドメインに参加させていないPCはローカル又は、WorkGroup のPCとなり、ユーザーは自分一人で使う分には、Admninのグループに 所属させておけばよいのですが、 ドメインに参加させた場合が問題ですよね? と、いいますのは、ドメインに参加させると、いきなり、Toolなど インストールできなくなったなどということがあると思います。 これは、つまり、ドメインに参加したユーザーにはインストール権限が無い ということになると思いますが、ドメインに参加したユーザーにもインストール できる権限をあたえるには、 (1)ドメインのAdministorator権限を与える( (2)DomainAdminのグループにいれる。 (3)ローカルPCのadmin権限でPCに入り直し、ローカルadminでインストール  を行うということが考えられると思います。 (1)(2)は通常、一般のユーザーにドメインのadmin権限など与えることはしないと 思うので、却下として(3)の場合です。 この(3)(ローカルのadmin権限を与える)は、ADのサーバー上から設定できるものなのでしょうか? ADのサーバー上から、ローカルのadmin権限を与えることができない場合は、どの様にすれば よいのでしょうか? それから、 ADのサーバー側でユーザーを作成すると、作成されたユーザーは、DomainUsersグループ に所属することになると思うのですが、このDomainUsersグループというものは、どの様な権限 を持つのでしょう?自分のPCにダウンロードしてきたToolなどインストールできない権限なわけですよね?

  • ActiveDirectoryのユーザとグループ

    ActiveDirectoryのユーザとグループについて教えてください。 構成は以下の通りです。 Aドメイン(フォレストA)  グループ:A-grp Bドメイン(フォレストB)  ユーザ : B-user AドメインからBドメインへの一方通行の信頼関係を 結んでいます。 ここで AドメインのグループA-grpにBドメインのユーザB-userを 所属させたいのですが、こういったことは可能でしょうか? グループA-grpでメンバの追加からBドメインを検索しようとしても 検索できませんでした。 仕様でできないのならば、あきらめますが何か方法があれば 教えてください。 以上、よろしくお願いします。

  • PHP+MySQL

    PHP4で、MySQLに接続しています。 $connには、接続IDが格納されています。 以下のスクリプトで、「エラー」が出てしまうのですが、何故でしょうか? $sql = "SELECT (User_num, User_name, User_pass) FROM User WHERE User_name='$login_name'"; if (!$result= mysql_query($sql, $conn)){ die (print ("エラー")); } SQL文を、 SELECT (User_num) FROM User WHERE User_name='$login_name' と書き換えるとうまくいきます。複数にするとエラーというのはどうしてでしょう

    • ベストアンサー
    • MySQL
  • XPの管理者

    WindoowsXP Pro 使用です。 今回SP2をインストールしてネットワーク上のプリンターのポートをPCごとに変更しなくてはならなくなりました。 その操作をPCから行いたいのですが、 「コンピューターの管理者」であるadminから スタート→プリンターとFAX→(変更するプリンター)のプロパティー →ポートタブ →「ポートの追加」 と行きたいのですが、→「ポートの追加」の文字が反転して操作できなくなっています。 これは、「コンピューターの管理者」の権限がないためだと思うのですが、どのように設定の変更をしたらよいでしょうか? ユーザーカウントは2つで、双方で変更ができません。 Adminの方の設定を変更したいのです。 adminの詳細 スタート → コントロールパネル→パフォーマンスとメンテナンス → 管理ツール → コンピュータの管理 →ローカルユーザーとグループ → ユーザー → adminの説明は空白になっています。 adminのプロパティータブの所属するグループ administratorsとusersの両方が出ています。 よろしくお願いします。

  • WindowsServer2008のドメインにWindows7から参加できない。

    WindowsServer2008のドメインにWindows7から参加できずに、 どこをどのようにいじればよいのかわからず困ってます。 ■システム環境 WindowsServer2008のドメイン環境に、WindowsXPを複数台 ぶら下げてつかっています。 ■困っている内容 新たにWindows7を参加させようと、新規クライアントPCの システムのプロパティ-コンピュータ名のタブから、「変更」 を押して、所属するグループをドメインに変更しドメイン名 を入力します。 ユーザー名とパスワードを聞かれる画面が出てきますので、 そこで、WinXPで使っていたアカウント、もしくはサーバの adminのID パスを入れてOKを押すと、下記のメッセージが表 示されてしまいます。 『ドメインに参加中に次のエラーが発生しました。 参加しようとしているドメインのドメインコントローラーの DNS名を解決できませんでした。このクライアントが、対象の ドメインでDNSを解決できるDNSサーバに到達できるよう構成 されていることを確認してください。』 ■補足 ネットワークのアイコンから、サーバにアクセスしにいって、 要求されるID,PASSを入力すれば共有しているフォルダへの アクセスはできます。 PINGもふつーに帰ってきます。 使用しているアカウントは、XPで使っていたID,PASSをつかっ ています。 Win7側の設定とは思うのですが、アドバイスお願いいたします。

  • SQL文の書き方について

    お世話になります。下記のような結果を求めるSQL文についてどなたかご教示をお願いします。 以下の2つのテーブル(SMPL_TBL1,SMPL_TBL2)があったとします。 (SMPL_TBL1) ID | NAME | BUSHO ---+--------+--------- 01 | YAMADA | A_GRP 02 | SUZUKI | A_GRP 03 | OKADA | B_GRP 04 | TAKAGI | C_GRP (SMPL_TBL2) ID | POINT | ---+-------+- 01 | 1 | 01 | 2 | 01 | 3 | 02 | 1 | 02 | 2 | 03 | 1 | 04 | 1 | 04 | 2 | 04 | 3 | 04 | 4 | 04 | 5 | 上記テーブルから以下のような結果を得たい場合、 どのようなSQL文を投げればいいでしょうか? (求める結果) ・各人ごとのPOINTのMAX値と各人のデータを抽出(POINTは1~999までの整数です) ID | NAME | POINT| BUSHO ---+--------+------+-------- 01 | YAMADA | 3 | A_GRP 02 | SUZUKI | 2 | A_GRP 03 | OKADA | 1 | B_GRP 04 | TAKAGI | 5 | C_GRP よろしくお願いいたします。

  • MySQL この場合どう書けばよいでしょうか?

    以下のようなデータがあります。 このデータから最後の「結果」のような形でデータを取り出したい場合、どのようにすればよいでしょうか? cat1とcat2を分けない形はgroup_concatを使ってできたのですが、カテゴリーごとに分けて取得したいです。 usr テーブル +--------+------+ | usr_id | name | +--------+------+ | 1 | 太郎 | | 2 | 二郎 | | 3 | 花子 | +--------+------+ usr_trm テーブル +--------+--------+ | usr_id | trm_id | +--------+--------+ | 1 | 1 | | 1 | 3 | | 1 | 4 | | 2 | 1 | | 2 | 2 | | 2 | 3 | | 3 | 2 | +--------+--------+ cat テーブル +--------+------+ | cat_id | name | +--------+------+ | 1 | 性別 | | 2 | 部署 | +--------+------+ trm テーブル +--------+--------+------+ | trm_id | cat_id | name | +--------+--------+------+ | 1 | 1 | 男性 | | 2 | 1 | 女性 | | 3 | 2 | 総務 | | 4 | 2 | 経理 | +--------+--------+------+ 結果 +--------+------+------+------+ | usr_id | name | cat1 | cat2 | +--------+------+------+------+ | 1 | 太郎 | 1 | 3,4 | | 2 | 二郎 | 1,2 | 3 | | 3 | 花子 | 2 |   | +--------+------+----- +------+

    • ベストアンサー
    • MySQL
  • ActiveDirectry ユーザ権限について

    会社でActiveDirectryを構築しています。(Win2000Server) もちろんActiveDirectryではユーザー管理をサーバーで一括して行なっていますが、一般ユーザーはドメイン上ではDomainUser、クライアントではインストール等作業ができるようにAdmin権限が必要なのです。 これを実現するためにはどのようなグループに所属させればよいのでしょうか? サーバー側のユーザ管理のみで実現できるのでしょうか?

  • vbscriptをHTMLに埋めるとエラーが出る

    下記のvbscriptをHTMLに埋める手段を考えています。 <SCRIPT LANGUAGE="VBScript">で入れると、 ActiveX コンポーネントを作成できません。:GetObject とエラーが出てしまいます。回避方法をご教授ください。 Dim usr,group,ComputerName,UserName,strADsPath ComputerName = "server" 'コンピュータ名 UserName = "testuser" 'ユーザ名 strADsPath = "WinNT://" & ComputerName & "/" & UserName & ",user" set usr = GetObject(strADsPath) For Each grp In usr.Groups MsgBox "グループ名: " & grp.Name Next