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

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

新規登録して質問してみよう
ただいま回答率
85.35%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

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

Q&A

解決済

3回答

4109閲覧

MySQL での集合差を取得したい

Yuiti628

総合スコア71

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

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

0グッド

0クリップ

投稿2020/06/15 15:43

編集2020/06/16 01:43

MySQL で集合差を取得したいのですが、上手くいきません。

mysql Ver 8.0.19

videoテーブルとwordテーブルがあります。

videoテーブル には word_id_1,word_id_2がありこの2つを連結し、wordテーブルのword_idになければword_idに追加したいとおもっています。

tabel: video

word_id_1word_id_2
12
34
56

tabel: word

word_id
1
2
3

完成目標

word_id
1
2
3
4
5
6

MySQL

1INSERT INTO word (word_id) 2SELECT cc.word_id_1 3FROM ( 4(SELECT word_id_1 FROM video ) 5UNION 6(SELECT word_id_2 FROM video ) 7) cc 8WHERE NOT EXISTS(SELECT word_id FROM word)

実行結果ではエラーは出ませんが、SELECTの結果も何もでてきません。

MySQL

1(SELECT word_id_1 FROM video ) 2UNION 3(SELECT word_id_2 FROM video )

MySQL

1SELECT word_id FROM word

selectしている場所を見るとそれぞれ結果は出ます。

追記
https://qiita.com/Hiraku/items/71873bf31e503eb1b4e1
参考して下記のようにLEFT JOINにしても、同じくエラーはなく、結果は何も出ませんでした(T . T)

MySQL

1SELECT bv.word_id_1 2FROM video bv 3LEFT JOIN word dw ON dw.word_id = bv.word_id_1 4WHERE bv.word_id_1 IS NULL

追記2
指摘していただき、where NOT EXISTS( を 変更しましたが、結果はやはり0レコードでした(;_;)

MySQL

1SELECT cc.word_id_1 2FROM ( 3(SELECT word_id_1 FROM video ) 4UNION 5(SELECT word_id_2 FROM video ) 6)cc 7WHERE cc.word_id_1 NOT IN(SELECT word_id FROM word)

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

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

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

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

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

guest

回答3

0

ベストアンサー

wordテーブルのword_idがユニークなら
insert ignore into wordでやるのが早いでしょう

投稿2020/06/16 01:05

yambejp

総合スコア116724

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

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

Yuiti628

2020/06/16 01:52

```MySQL insert ignore into word (word_id) select cc.word_id_1 from ( (SELECT word_id_1 FROM video ) UNION (SELECT word_id_2 FROM video ) ) cc ``` でできました!!!
yambejp

2020/06/16 08:58

unionする必要があるかどうかも微妙 2回insertするほうが早いかもしれません
guest

0

NOT EXISTS ではなく、NOT IN を使えばいいと思います。

diff

1 INSERT INTO word (word_id) 2 SELECT cc.word_id_1 FROM (略) cc 3-WHERE NOT EXISTS(SELECT word_id FROM word) 4+WHERE cc.word_id_1 NOT IN (SELECT word_id FROM word)

NOT EXISTS は cc.word_id_1 の値にかかわらず、() の中の SELECT word_id FROM word の結果が存在しなければ、という意味になります。NOT EXISTS を使うなら次のようにも書けますが、たぶん NOT IN を使った方が効率が良い気がします。(確かめてませんが。)

sql

1WHERE NOT EXISTS (SELECT word_id FROM word WHERE word_id = cc.word_id_1)

投稿2020/06/15 20:02

hoshi-takanori

総合スコア7901

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

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

Yuiti628

2020/06/16 01:25

理由は分かりませんが、それは一度試して失敗していました。 SQLエラー [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 'WHERE cc.word_id_1 NOT EXISTS (' at line 1
guest

0

上手くいきません。

思い通りの結果にならないのなら、各テーブルにこういうデータがあって(CREATE TABLEとINSERTでデータを何件か提示)質問のSELECTを実行するとこういう結果になって欲しいのに、こっちの結果になった。とか、
エラーメッセージが表示されているなら、その内容を修正も要約もしないでそのまま追記してください。

SQL

1(SELECT word_id_1 FROM buzz_video where word_id_1 <>"") 23 ぱっとみたところ全角の空白が入っているのでエラーになりませんか? 4 5 6<>"" 78IS NOT NULL 9で書いては?

投稿2020/06/15 16:21

Orlofsky

総合スコア16417

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

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

Yuiti628

2020/06/15 16:47

分かりづらくて申し訳ありません。 質問の方を修正させてもらいました。 エラーはなく、何もselectできない状態です。 文法的なところだと思うのですが、何が原因なのかサッパリな状態です。
Orlofsky

2020/06/15 23:53

質問を追記できると動作確認してくれる人もいるかと。 >CREATE TABLEとINSERTでデータを何件か提示
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問