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

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

新規登録して質問してみよう
ただいま回答率
85.47%
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回答

1966閲覧

一つのテーブルで複数条件で抽出するSQL文

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

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

SQL

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

0グッド

0クリップ

投稿2018/06/08 11:02

編集2018/06/08 11:59

wp_postmetaテーブル

post_idmeta_keymeta_value
1a
1a
1a
1b
1b
2a
2a
2b
2b

上記のようなテーブルがあり、以下2つの条件を「SQL文」で求めたいです。

1.meta_keyの値が「a」で、かつ、meta_valueの値が「あ」かつ「い」であるpost_idの値

meta_key=a and meta_value=あ and meta_value=い

例では「1」となる。

2.meta_keyの値が「a」で、かつ、meta_valueの値が「あ」かつ「う」、かつ、meta_keyの値が「b」で、かつ、meta_valueの値が「あ」かつ「え」であるpost_idの値

(meta_key=a and meta_value=あ and meta_value=う) and (meta_key=b and meta_value=あ and meta_value=え)

例では「1」及び「2」となる。

知っているSQLではなかなか求められず、どのような方法があるのかご教示いただきたいです。

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

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

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

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

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

guest

回答3

0

1.meta_keyの値が「a」で、かつ、meta_valueの値が「あ」かつ「い」であるpost_idの値

上記は、
【meta_keyが「a」かつmeta_valueが「あ」の集合】

【meta_keyが「a」かつmeta_valueが「い」の集合】
を共に含む集合となります。

2も同様に素直に記述すると以下になります。

SQL

1-- 1の集合 2select distinct post_id 3from wp_postmeta 4where post_id in (select post_id from wp_postmeta where meta_key='a' and meta_value='あ') 5 and post_id in (select post_id from wp_postmeta where meta_key='a' and meta_value='い') 6-- 2の集合 7union all 8select distinct post_id 9from wp_postmeta 10where post_id in (select post_id from wp_postmeta where meta_key='a' and meta_value='あ') 11 and post_id in (select post_id from wp_postmeta where meta_key='a' and meta_value='う') 12 and post_id in (select post_id from wp_postmeta where meta_key='b' and meta_value='あ') 13 and post_id in (select post_id from wp_postmeta where meta_key='b' and meta_value='え')

※group_concat()に対しての正規表現による条件で簡潔になるかも。

投稿2018/06/08 13:42

sazi

総合スコア25206

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

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

0

ベストアンサー

1

SQL

1select post_id from wp_postmeta where meta_key='a' and meta_value in('あ','い') 2group by post_id having count(distinct meta_value)=2

2

ロジックが間違っているので回答できません
つまり(meta_key=a and meta_value=あ and meta_value=い) →1
(meta_key=b and meta_value=あ and meta_value=え) →1or2
そのandをとると1のハズですが、命題では「1」及び「2」を得たいとのこと

あらためて

SQL

1select post_id from( 2select post_id from wp_postmeta where meta_key='a' and meta_value in('あ','い') 3group by post_id having count(distinct meta_value)=2 4union all select post_id from wp_postmeta where meta_key='b' and meta_value in('あ','え') 5group by post_id having count(distinct meta_value)=2 6) as sub group by post_id having count(*)=2 7

投稿2018/06/08 11:27

編集2018/06/08 11:58
yambejp

総合スコア114951

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

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

退会済みユーザー

退会済みユーザー

2018/06/08 11:37

こちら、例を修正しました。
yambejp

2018/06/08 11:58

追記しました
guest

0

group by と havingを使うと抽出出来ると思います。(未検証)
以下、確かめていないので多少文法エラーはあるかもしれませんが、雰囲気はあってると思います。
2つは考えていませんが、応用でいけるような気がします。
参考になれば幸いです。

SQL

1select post_id 2from wp_postmeta 3where 4meta_key='a' and meta_value in ('あ', 'い') 5group by post_id 6having count(post_id) = 2

投稿2018/06/08 11:25

YasuhiroMiyake

総合スコア1336

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

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

yambejp

2018/06/08 11:30 編集

count(post_id)ではないと思います かりにmeta_valuedだとしても distinctをかまさないと「い」がダブっているので=2になりません
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問