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

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

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

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

PostgreSQL

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

Q&A

解決済

4回答

830閲覧

booleanのいずれかの項目にtrueがあるものを抽出するSQL文

ssk

総合スコア332

MySQL

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

PostgreSQL

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

0グッド

0クリップ

投稿2023/11/02 06:23

編集2023/11/02 07:19

booleanの項目からtrueのレコードを抽出する方法はありますか?
以下の場合、1と2と4が該当します。

#hoge1hoge2hoge3hoge4hoge5
1true
2true
3false
4true
5false

以下のようにやっていくしかないですかね?
20項目くらいあるので...

SQL

1select where ( hoge1 = true OR hoge2 = true OR hoge3 = true OR hoge4 = true OR hoge5 = true ) from table_name

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

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

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

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

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

maisumakun

2023/11/02 06:33

どのようなことを調べ・実行して、どのような状況で行き詰まっているところでしょうか?
maisumakun

2023/11/02 06:49

テーブル定義をご提示ください。あと、「20項目」はそれぞれどのような項目なのでしょうか? (提示された表と文章の内容から、「ID」「項目名」「型」の3列のテーブルについての話だと思いこんでいました。)
ssk

2023/11/02 07:19

テーブルを修正いたしました。
guest

回答4

0

ユーザー定義変数を利用する方法も考えられます。

DB Fiddle

sql

1CREATE TABLE hoge 2 (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 3 hoge1 BOOLEAN, hoge2 BOOLEAN, hoge3 BOOLEAN, 4 hoge4 BOOLEAN, hoge5 BOOLEAN); 5 6INSERT INTO hoge (hoge1, hoge2, hoge3, hoge4, hoge5) 7VALUES 8 ( true, false, false, false, false), 9 (false, true, false, false, false), 10 (false, false, false, false, false), 11 (false, false, false, true, false), 12 (false, false, false, false, false); 13 14SET @sql = NULL; 15SELECT GROUP_CONCAT(COLUMN_NAME) INTO @sql 16FROM INFORMATION_SCHEMA.COLUMNS 17WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'hoge' 18 AND COLUMN_TYPE = 'tinyint(1)'; 19 20SET @sql = CONCAT('SELECT * FROM hoge WHERE true IN (', @sql,')'); 21 22PREPARE stmt FROM @sql; 23EXECUTE stmt; 24DEALLOCATE PREPARE stmt;

投稿2023/11/02 08:35

melian

総合スコア21118

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

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

0

解決済みですが

sql

1select * 2from table_name 3where true in(hoge1,hoge2,hoge3,hoge4,hoge5)

ご参考

投稿2023/11/02 11:31

編集2023/11/02 12:33
takanaweb5

総合スコア359

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

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

0

ベストアンサー

mysqlの場合、bool値はtinyintの1/0なので足せばいいのでは?

SQL

1select * 2from table_name 3where hoge1+hoge2+hoge4>0

投稿2023/11/02 07:26

yambejp

総合スコア117663

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

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

ssk

2023/11/02 07:33

ありがとうございます。postgreSQLの場合は難しいですか?
yambejp

2023/11/02 08:23

postgreはよくわかりませんが SELECT * FROM table_name WHERE hoge1 or hoge2 or hoge4 的な処理でいけませんか? なぜmysqlとpostgreの違うSQLで検証が必要なのか疑問ですが・・・
guest

0

以下のようにやっていくしかないですかね?
20項目くらいあるので...

  • 20項目がそれぞれ独立した列であれば、この方法が正攻法となります。
  • 同じ系統の20項目で、「20個のどれか」のような操作が頻発するのであれば、そもそもテーブル構造が悪いです。

投稿2023/11/02 07:25

maisumakun

総合スコア146544

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

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

ssk

2023/11/02 07:35

ありがとうございます。 一旦スッキリ書けそうなyambejp様の方法でできるか試してみます。 難しいようでしたら、正攻法で進めたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問