質問編集履歴

5 specテーブルに5番データ追加

zico_teratail

zico_teratail score 467

2017/01/06 08:19  投稿

特定条件でのselectの方法
[別の質問](https://teratail.com/questions/60504)を解決したのち、その流れで生じた新たな別の疑問です。
以下のようなテーブル定義の時、たとえば「priority=1のspecが1」かつ「priority=2のspecが5」の人の名前を一発で抜き出すクエリは可能でしょうか?
###テーブル定義
```sql
※以前の質問でKosuke_Shibuyaさんにご提示いただいたテーブル定義をほぼそのまま踏襲しています。
CREATE TABLE IF NOT EXISTS `abilities` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `member_id` int(11) DEFAULT NULL,
 `spec_id` int(11) DEFAULT NULL,
 `priority` int(11) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=6 ;
INSERT INTO `abilities` (`id`, `member_id`, `spec_id`, `priority`) VALUES
(1, 1, 1, 1),
(2, 1, 5, 2),
(3, 2, 1, 1),
(4, 2, 3, 2),
(5, 2, 4, 3);
CREATE TABLE IF NOT EXISTS `member` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(30) NOT NULL DEFAULT '',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=3 ;
INSERT INTO `member` (`id`, `name`) VALUES
(1, 'tanaka'),
(2, 'suzuki');
CREATE TABLE IF NOT EXISTS `spec` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `spec` varchar(10) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=5 ;
INSERT INTO `spec` (`id`, `spec`) VALUES
(1, '走る'),
(2, '投げる'),
(3, '跳ぶ'),
(4, '握る');
(4, '握る'),
(5, '歩く');
```
###試したクエリ
「id1 tanaka」を抽出したくて以下のクエリを投げましたが、結果は空でした。
```sql
SELECT m.id, m.name, GROUP_CONCAT( s.spec
ORDER BY a.priority ) AS specs
FROM member m
LEFT JOIN abilities a ON m.id = a.member_id
LEFT JOIN spec s ON a.spec_id = s.id
WHERE (
a.spec_id =1
AND a.priority =1
)
AND (
a.spec_id =5
AND a.priority =2
)
GROUP BY m.id
```
このようなwhere句の書き方はダメなのでしょうか。
  • MySQL

    8759 questions

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

  • SQL

    3891 questions

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

  • データベース

    1380 questions

    データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

4 specテーブルのcreateも修正

zico_teratail

zico_teratail score 467

2017/01/06 01:13  投稿

特定条件でのselectの方法
[別の質問](https://teratail.com/questions/60504)を解決したのち、その流れで生じた新たな別の疑問です。
以下のようなテーブル定義の時、たとえば「priority=1のspecが1」かつ「priority=2のspecが5」の人の名前を一発で抜き出すクエリは可能でしょうか?
###テーブル定義
```sql
※以前の質問でKosuke_Shibuyaさんにご提示いただいたテーブル定義をほぼそのまま踏襲しています。
CREATE TABLE IF NOT EXISTS `abilities` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `member_id` int(11) DEFAULT NULL,
 `spec_id` int(11) DEFAULT NULL,
 `priority` int(11) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=6 ;
INSERT INTO `abilities` (`id`, `member_id`, `spec_id`, `priority`) VALUES
(1, 1, 1, 1),
(2, 1, 5, 2),
(3, 2, 1, 1),
(4, 2, 3, 2),
(5, 2, 4, 3);
CREATE TABLE IF NOT EXISTS `member` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(30) NOT NULL DEFAULT '',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=3 ;
INSERT INTO `member` (`id`, `name`) VALUES
(1, 'tanaka'),
(2, 'suzuki');
CREATE TABLE IF NOT EXISTS `spec` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `spec` int(10) unsigned NOT NULL,
 `spec` varchar(10) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=5 ;
INSERT INTO `spec` (`id`, `spec`) VALUES
(1, '走る'),
(2, '投げる'),
(3, '跳ぶ'),
(4, '握る');
```
###試したクエリ
「id1 tanaka」を抽出したくて以下のクエリを投げましたが、結果は空でした。
```sql
SELECT m.id, m.name, GROUP_CONCAT( s.spec
ORDER BY a.priority ) AS specs
FROM member m
LEFT JOIN abilities a ON m.id = a.member_id
LEFT JOIN spec s ON a.spec_id = s.id
WHERE (
a.spec_id =1
AND a.priority =1
)
AND (
a.spec_id =5
AND a.priority =2
)
GROUP BY m.id
```
このようなwhere句の書き方はダメなのでしょうか。
  • MySQL

    8759 questions

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

  • SQL

    3891 questions

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

  • データベース

    1380 questions

    データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

3 specテーブルへのinsertを修正

zico_teratail

zico_teratail score 467

2017/01/06 01:12  投稿

特定条件でのselectの方法
[別の質問](https://teratail.com/questions/60504)を解決したのち、その流れで生じた新たな別の疑問です。
以下のようなテーブル定義の時、たとえば「priority=1のspecが1」かつ「priority=2のspecが5」の人の名前を一発で抜き出すクエリは可能でしょうか?
###テーブル定義
```sql
※以前の質問でKosuke_Shibuyaさんにご提示いただいたテーブル定義をほぼそのまま踏襲しています。
CREATE TABLE IF NOT EXISTS `abilities` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `member_id` int(11) DEFAULT NULL,
 `spec_id` int(11) DEFAULT NULL,
 `priority` int(11) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=6 ;
INSERT INTO `abilities` (`id`, `member_id`, `spec_id`, `priority`) VALUES
(1, 1, 1, 1),
(2, 1, 5, 2),
(3, 2, 1, 1),
(4, 2, 3, 2),
(5, 2, 4, 3);
CREATE TABLE IF NOT EXISTS `member` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(30) NOT NULL DEFAULT '',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=3 ;
INSERT INTO `member` (`id`, `name`) VALUES
(1, 'tanaka'),
(2, 'suzuki');
CREATE TABLE IF NOT EXISTS `spec` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `spec` int(10) unsigned NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=5 ;
INSERT INTO `spec` (`id`, `spec`) VALUES
(1, 0),
(2, 0),
(3, 0),
(4, 0);
(1, '走る'),
(2, '投げる'),
(3, '跳ぶ'),
(4, '握る');
```
###試したクエリ
「id1 tanaka」を抽出したくて以下のクエリを投げましたが、結果は空でした。
```sql
SELECT m.id, m.name, GROUP_CONCAT( s.spec
ORDER BY a.priority ) AS specs
FROM member m
LEFT JOIN abilities a ON m.id = a.member_id
LEFT JOIN spec s ON a.spec_id = s.id
WHERE (
a.spec_id =1
AND a.priority =1
)
AND (
a.spec_id =5
AND a.priority =2
)
GROUP BY m.id
```
このようなwhere句の書き方はダメなのでしょうか。
  • MySQL

    8759 questions

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

  • SQL

    3891 questions

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

  • データベース

    1380 questions

    データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

2 クエリも訂正

zico_teratail

zico_teratail score 467

2017/01/05 23:12  投稿

特定条件でのselectの方法
[別の質問](https://teratail.com/questions/60504)を解決したのち、その流れで生じた新たな別の疑問です。
以下のようなテーブル定義の時、たとえば「priority=1のspecが1」かつ「priority=2のspecが5」の人の名前を一発で抜き出すクエリは可能でしょうか?
###テーブル定義
```sql
※以前の質問でKosuke_Shibuyaさんにご提示いただいたテーブル定義をほぼそのまま踏襲しています。
CREATE TABLE IF NOT EXISTS `abilities` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `member_id` int(11) DEFAULT NULL,
 `spec_id` int(11) DEFAULT NULL,
 `priority` int(11) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=6 ;
INSERT INTO `abilities` (`id`, `member_id`, `spec_id`, `priority`) VALUES
(1, 1, 1, 1),
(2, 1, 5, 2),
(3, 2, 1, 1),
(4, 2, 3, 2),
(5, 2, 4, 3);
CREATE TABLE IF NOT EXISTS `member` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(30) NOT NULL DEFAULT '',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=3 ;
INSERT INTO `member` (`id`, `name`) VALUES
(1, 'tanaka'),
(2, 'suzuki');
CREATE TABLE IF NOT EXISTS `spec` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `spec` int(10) unsigned NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=5 ;
INSERT INTO `spec` (`id`, `spec`) VALUES
(1, 0),
(2, 0),
(3, 0),
(4, 0);
```
###試したクエリ
「id1 tanaka」を抽出したくて以下のクエリを投げましたが、結果は空でした。
```sql
SELECT m.id, m.name, GROUP_CONCAT( s.spec
ORDER BY a.priority ) AS specs
FROM member m
LEFT JOIN abilities a ON m.id = a.member_id
LEFT JOIN spec s ON a.spec_id = s.id
WHERE (
a.spec_id =1
AND a.priority =1
)
AND (
a.spec_id =2
AND a.priority =5
a.spec_id =5
AND a.priority =2
)
GROUP BY m.id
```
このようなwhere句の書き方はダメなのでしょうか。
  • MySQL

    8759 questions

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

  • SQL

    3891 questions

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

  • データベース

    1380 questions

    データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

1 テーブル定義修正

zico_teratail

zico_teratail score 467

2017/01/05 23:10  投稿

特定条件でのselectの方法
[別の質問](https://teratail.com/questions/60504)を解決したのち、その流れで生じた新たな別の疑問です。
以下のようなテーブル定義の時、たとえば「priority=1のspecが1」かつ「priority=2のspecが5」の人の名前を一発で抜き出すクエリは可能でしょうか?
###テーブル定義
```sql
※以前の質問でKosuke_Shibuyaさんにご提示いただいたテーブル定義をほぼそのまま踏襲しています。
CREATE TABLE IF NOT EXISTS `abilities` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `member_id` int(11) DEFAULT NULL,
 `spec_id` int(11) DEFAULT NULL,
 `priority` int(11) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=6 ;
INSERT INTO `abilities` (`id`, `member_id`, `spec_id`, `priority`) VALUES
(1, 1, 1, 1),
(2, 1, 2, 5),
(2, 1, 5, 2),
(3, 2, 1, 1),
(4, 2, 3, 2),
(5, 2, 4, 3);
CREATE TABLE IF NOT EXISTS `member` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(30) NOT NULL DEFAULT '',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=3 ;
INSERT INTO `member` (`id`, `name`) VALUES
(1, 'tanaka'),
(2, 'suzuki');
CREATE TABLE IF NOT EXISTS `spec` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `spec` int(10) unsigned NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=5 ;
INSERT INTO `spec` (`id`, `spec`) VALUES
(1, 0),
(2, 0),
(3, 0),
(4, 0);
```
###試したクエリ
「id1 tanaka」を抽出したくて以下のクエリを投げましたが、結果は空でした。
```sql
SELECT m.id, m.name, GROUP_CONCAT( s.spec
ORDER BY a.priority ) AS specs
FROM member m
LEFT JOIN abilities a ON m.id = a.member_id
LEFT JOIN spec s ON a.spec_id = s.id
WHERE (
a.spec_id =1
AND a.priority =1
)
AND (
a.spec_id =2
AND a.priority =5
)
GROUP BY m.id
```
このようなwhere句の書き方はダメなのでしょうか。
  • MySQL

    8759 questions

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

  • SQL

    3891 questions

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

  • データベース

    1380 questions

    データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る