質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Amazon Athena

Amazon Athenaは、標準SQLを使用してAmazon S3内のデータを直接分析することができるインタラクティブなクエリサービスです。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

3回答

2294閲覧

SQL: 異なるテーブル間の重複しないIDを抽出したい

DJR

総合スコア13

Amazon Athena

Amazon Athenaは、標準SQLを使用してAmazon S3内のデータを直接分析することができるインタラクティブなクエリサービスです。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2020/07/15 01:53

前提・実現したいこと

  • ユーザテーブルusersと大会参加者テーブルtaikaiAがあります。それぞれ、cidと呼ぶユーザ固有のIDが含まれています。

イメージ説明

  • SQLを使って大会Aに参加していない会員を一覧にしたいのです。以下が期待している結果です。

イメージ説明

  • 全ユーザリスト ー 大会A参加者=参加していない会員 を実現したいのですが、ちょっと思いつきません。SQLの超基本のような気もします。ご教示いただけると幸いです。

補足情報(FW/ツールのバージョンなど)

  • Amazon Athenaを使っています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

すでに回答のあるleft joinしてnullで検索するのが一般的ですね
あとはexistsとか?

SQL

1select * from users as t1 2where not exists(select 1 from taikaiA where cid=t1.cid) 3

投稿2020/07/15 02:25

yambejp

総合スコア114747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

DJR

2020/07/15 02:31

not existsの知見ありがとうございました。私のような初心者にはイメージがつきやすいです。
sousuke

2020/07/15 02:36

left join+is nullが一般的なのってどうしてなんでしょうね… not existsの方が「ないものを検索する」感があるしテーブル構成によってgroup化するまでもないから 個人的にはnot exists推しなんだけどなあ
yambejp

2020/07/15 02:39

私が昔なにかの教本でみたのが「left join+is null」なので とにかく汎用性が高いのいいんじゃないですかね? RDBによってはexists系の処理が異様に遅いものもあったみたいですし テストしてパフォーマンスをみながら決めればいいと思います
DJR

2020/07/15 02:56

sousukeさん、 > 「ないものを検索する」感 これ初心者にはめっちゃ大事です。ありがとうございます。私のレベルでは汎用性ですかね。
guest

0

ベストアンサー

全ユーザリスト ー 大会A参加者=参加していない会員 を実現したいのですが、ちょっと思いつきません。SQLの超基本のような気もします。

求めるものは差集合というもので基本です。
SQLの集合演算整理

覚えておくものとしては、外部結合(outer join)が一番使い勝手が良いと思います。

SQL

1select users.cid 2from users left join taikaiA 3 on users.cid=taikaiA.cid 4where aikaiA.cid is null

投稿2020/07/15 02:12

編集2020/07/15 02:17
sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

DJR

2020/07/15 02:30

ご回答ありがとうございます。確かにleft join してNULLとるとサクッと分かりますね。1でいただいたExceptなども知識としてなかったので助かりました。
sazi

2020/07/15 02:43 編集

使い分けるのは、求める集合次第です。 目的に限定するなら、existsの方が性能的にも良いと思いますが、相関問合せである必要もあるし、まだまだこれからだと思いましたので、利用場面の多いものをお薦めしておきました。
guest

0

SQL

1SELECT cid FROM users 2MINUS 3SELECT cid FROM taikaiA;

投稿2020/07/15 01:57

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2020/07/15 02:15

postgresではminusではなくEXCEPTです。
Orlofsky

2020/07/15 02:22

すみません。忘れていました。
DJR

2020/07/15 02:28

Orlofskyさん、回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問