🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
MySQL

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

SQL

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

Q&A

1回答

964閲覧

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クリップ

投稿2021/03/18 09:23

編集2021/03/21 14:18

前提・実現したいこと

在庫管理システムを練習として作成しています。
在庫管理を行っているDBにて
各在庫に紐付いているアイテム(ITEM_ID)を出力したいです。

発生している問題・エラーメッセージ

以下のsqlで出力したZAIKO_IDと紐付いているITEM_IDを
S_INFO.ZAIKO_IDと同じ行にすべて出力したいのですが、
仕様が複雑なため、良い出力方法が思いつかず、ご教授いただけますと幸いです。

SELECT S_INFO.ZAIKO_ID FROM ZAIKO_INFO AS S_INFO INNER JOIN ZAIKO_CHECK AS S_CHECK ON S_INFO.ZAIKO_ID = S_CHECK.ZAIKO_ID AND S_CHECK.SAKJYO_FLG = 0 WHERE S_INFO.SAKJYO_FLG = 0;

▼テーブルの仕様は以下の通りです。

【ITEM_INFO】の各ITEM_IDには、【ZAIKO_INFO】のZAIKO_IDが紐付いていて、
ZAIKO_IDが1つ紐付く場合は、【ITEM_INFO】のZAIKO_IDに紐付けて、
ZAIKO_IDが複数紐付く場合は、【ITEM_INFO】のZAIKO_ID_GROUPまたはITEM_ID_GROUPにて
グループとして紐付けられます。
ZAIKO_IDが1つも紐付かない場合は、すべて空となります。

【ZAIKO_INFO_GROUP】のZAIKO_ID_GROUPは
【ZAIKO_INFO】のZAIKO_IDをグループ化したもので、
【ITEM_INFO_GROUP】のITEM_ID_GROUPは
【ITEM_INFO】のITEM_IDをグループ化したものです。
※ZAIKO_IDが複数紐付く場合、アイテムによって、
ZAIKO_ID_GROUPまたはITEM_ID_GROUPのどちらが紐付くかが異なります。

【確認用 CREATE文】 CREATE TABLE `ITEM_INFO` ( `ITEM_ID` varchar(10) COLLATE utf8_unicode_ci NOT NULL COMMENT 'アイテムID', `ITEM_NAME` varchar(64) COLLATE utf8_unicode_ci NOT NULL COMMENT 'アイテム名', `ZAIKO_ID_GROUP` varchar(10) COLLATE utf8_unicode_ci NOT NULL COMMENT '在庫IDグループ', `ITEM_ID_GROUP` varchar(10) COLLATE utf8_unicode_ci NOT NULL COMMENT 'アイテムグループ', `ZAIKO_ID` varchar(10) COLLATE utf8_unicode_ci NOT NULL COMMENT '在庫ID', `SAKJYO_FLG` tinyint(1) NOT NULL, PRIMARY KEY (`ITEM_ID`) ) CREATE TABLE `ZAIKO_INFO` ( `ZAIKO_ID` varchar(10) COLLATE utf8_unicode_ci NOT NULL COMMENT '在庫ID', `ITEM_NAME` varchar(64) COLLATE utf8_unicode_ci NOT NULL COMMENT '在庫名', `SAKJYO_FLG` tinyint(1) NOT NULL, PRIMARY KEY (`ZAIKO_ID`) ) CREATE TABLE `ITEM_INFO_GROUP` ( `ITEM_ID_GROUP` varchar(10) COLLATE utf8_unicode_ci NOT NULL COMMENT 'アイテムIDグループ', `ITEM_ID` varchar(10) COLLATE utf8_unicode_ci NOT NULL COMMENT 'アイテムID', `SAKJYO_FLG` tinyint(1) NOT NULL, PRIMARY KEY (`ITEM_ID_GROUP`,`ITEM_ID`) ) CREATE TABLE `ZAIKO_INFO_GROUP` ( `ZAIKO_ID_GROUP` varchar(10) COLLATE utf8_unicode_ci NOT NULL COMMENT '在庫IDグループ', `ZAIKO_ID` varchar(10) COLLATE utf8_unicode_ci NOT NULL COMMENT '在庫ID', `SAKJYO_FLG` tinyint(1) NOT NULL, PRIMARY KEY (`ZAIKO_ID_GROUP`,`ZAIKO_ID`) ) CREATE TABLE `ZAIKO_CHECK` ( `ZAIKO_ID` varchar(10) COLLATE utf8_unicode_ci NOT NULL COMMENT '在庫ID', `SAKJYO_FLG` tinyint(1) NOT NULL, PRIMARY KEY (`ZAIKO_ID`) ) 【確認用 INSERT文】 INSERT INTO `ITEM_INFO` (`ITEM_ID`, `ITEM_NAME`, `ZAIKO_ID_GROUP`, `ITEM_ID_GROUP`, `ZAIKO_ID`, `SAKJYO_FLG`) VALUES ('I001','アイテムA','','','Z002','0'); INSERT INTO `ITEM_INFO` (`ITEM_ID`, `ITEM_NAME`, `ZAIKO_ID_GROUP`, `ITEM_ID_GROUP`, `ZAIKO_ID`, `SAKJYO_FLG`) VALUES ('I002','アイテムB','ZIG003','','','0'); INSERT INTO `ITEM_INFO` (`ITEM_ID`, `ITEM_NAME`, `ZAIKO_ID_GROUP`, `ITEM_ID_GROUP`, `ZAIKO_ID`, `SAKJYO_FLG`) VALUES ('I003','アイテムC','','IIG003','','0'); INSERT INTO `ITEM_INFO` (`ITEM_ID`, `ITEM_NAME`, `ZAIKO_ID_GROUP`, `ITEM_ID_GROUP`, `ZAIKO_ID`, `SAKJYO_FLG`) VALUES ('I004','アイテムD','','','','0'); INSERT INTO `ITEM_INFO` (`ITEM_ID`, `ITEM_NAME`, `ZAIKO_ID_GROUP`, `ITEM_ID_GROUP`, `ZAIKO_ID`, `SAKJYO_FLG`) VALUES ('I005','アイテムE','','','','0'); INSERT INTO `ITEM_INFO` (`ITEM_ID`, `ITEM_NAME`, `ZAIKO_ID_GROUP`, `ITEM_ID_GROUP`, `ZAIKO_ID`, `SAKJYO_FLG`) VALUES ('I006','アイテムF','ZIG001','','','0'); INSERT INTO `ZAIKO_INFO` (`ZAIKO_ID`, `ITEM_NAME`, `SAKJYO_FLG` ) VALUES ('Z001','在庫A','0'); INSERT INTO `ZAIKO_INFO` (`ZAIKO_ID`, `ITEM_NAME`, `SAKJYO_FLG` ) VALUES ('Z002','在庫B','0'); INSERT INTO `ZAIKO_INFO` (`ZAIKO_ID`, `ITEM_NAME`, `SAKJYO_FLG` ) VALUES ('Z003','在庫C','0'); INSERT INTO `ZAIKO_INFO` (`ZAIKO_ID`, `ITEM_NAME`, `SAKJYO_FLG` ) VALUES ('Z004','在庫D','0'); INSERT INTO `ZAIKO_INFO` (`ZAIKO_ID`, `ITEM_NAME`, `SAKJYO_FLG` ) VALUES ('Z005','在庫E','0'); INSERT INTO `ZAIKO_INFO` (`ZAIKO_ID`, `ITEM_NAME`, `SAKJYO_FLG` ) VALUES ('Z006','在庫F','0'); INSERT INTO `ITEM_INFO_GROUP` (`ITEM_ID_GROUP`, `ITEM_ID`, `SAKJYO_FLG` ) VALUES ('IIG001','I001','0'); INSERT INTO `ITEM_INFO_GROUP` (`ITEM_ID_GROUP`, `ITEM_ID`, `SAKJYO_FLG` ) VALUES ('IIG001','I002','0'); INSERT INTO `ITEM_INFO_GROUP` (`ITEM_ID_GROUP`, `ITEM_ID`, `SAKJYO_FLG` ) VALUES ('IIG001','I003','0'); INSERT INTO `ITEM_INFO_GROUP` (`ITEM_ID_GROUP`, `ITEM_ID`, `SAKJYO_FLG` ) VALUES ('IIG002','I004','0'); INSERT INTO `ITEM_INFO_GROUP` (`ITEM_ID_GROUP`, `ITEM_ID`, `SAKJYO_FLG` ) VALUES ('IIG002','I009','0'); INSERT INTO `ITEM_INFO_GROUP` (`ITEM_ID_GROUP`, `ITEM_ID`, `SAKJYO_FLG` ) VALUES ('IIG002','I010','0'); INSERT INTO `ITEM_INFO_GROUP` (`ITEM_ID_GROUP`, `ITEM_ID`, `SAKJYO_FLG` ) VALUES ('IIG003','I005','0'); INSERT INTO `ITEM_INFO_GROUP` (`ITEM_ID_GROUP`, `ITEM_ID`, `SAKJYO_FLG` ) VALUES ('IIG003','I006','0'); INSERT INTO `ZAIKO_INFO_GROUP` (`ZAIKO_ID_GROUP`, `ZAIKO_ID`, `SAKJYO_FLG` ) VALUES ('ZIG001','Z001','0'); INSERT INTO `ZAIKO_INFO_GROUP` (`ZAIKO_ID_GROUP`, `ZAIKO_ID`, `SAKJYO_FLG` ) VALUES ('ZIG001','Z002','0'); INSERT INTO `ZAIKO_INFO_GROUP` (`ZAIKO_ID_GROUP`, `ZAIKO_ID`, `SAKJYO_FLG` ) VALUES ('ZIG001','Z003','0'); INSERT INTO `ZAIKO_INFO_GROUP` (`ZAIKO_ID_GROUP`, `ZAIKO_ID`, `SAKJYO_FLG` ) VALUES ('ZIG002','Z004','0'); INSERT INTO `ZAIKO_INFO_GROUP` (`ZAIKO_ID_GROUP`, `ZAIKO_ID`, `SAKJYO_FLG` ) VALUES ('ZIG002','Z009','0'); INSERT INTO `ZAIKO_INFO_GROUP` (`ZAIKO_ID_GROUP`, `ZAIKO_ID`, `SAKJYO_FLG` ) VALUES ('ZIG002','Z010','0'); INSERT INTO `ZAIKO_INFO_GROUP` (`ZAIKO_ID_GROUP`, `ZAIKO_ID`, `SAKJYO_FLG` ) VALUES ('ZIG003','Z007','0'); INSERT INTO `ZAIKO_INFO_GROUP` (`ZAIKO_ID_GROUP`, `ZAIKO_ID`, `SAKJYO_FLG` ) VALUES ('ZIG003','Z002','0'); INSERT INTO `ZAIKO_CHECK` (`ZAIKO_ID`, `SAKJYO_FLG` ) VALUES ('Z001','0'); INSERT INTO `ZAIKO_CHECK` (`ZAIKO_ID`, `SAKJYO_FLG` ) VALUES ('Z002','0'); INSERT INTO `ZAIKO_CHECK` (`ZAIKO_ID`, `SAKJYO_FLG` ) VALUES ('Z003','0'); INSERT INTO `ZAIKO_CHECK` (`ZAIKO_ID`, `SAKJYO_FLG` ) VALUES ('Z004','0'); INSERT INTO `ZAIKO_CHECK` (`ZAIKO_ID`, `SAKJYO_FLG` ) VALUES ('Z005','0'); INSERT INTO `ZAIKO_CHECK` (`ZAIKO_ID`, `SAKJYO_FLG` ) VALUES ('Z006','0');

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

MySqlのバージョンは6.3になります。

期待する結果は以下です

ZAIKO_IDITEM_ID
Z001I006
Z002I001,I002,I006
Z003I006

※ZAIKO_IDに対して紐付いているITEM_IDをすべてカンマ区切りで出力
※ZAIKO_IDが存在しないものは空

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

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

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

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

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

yambejp

2021/03/18 10:57

> MySqlのバージョンは6.3になります 何をみてそう判断しましたか?
退会済みユーザー

退会済みユーザー

2021/03/18 10:59

MySQL Workbench→上部のメニューバーのHelp→About Workbenchで確認しました。
guest

回答1

0

ZAIKO_CHECKというテーブルが用意されていません
またcreate table 内でカンマがなくてエラーになっている箇所があります

投稿2021/03/18 11:02

yambejp

総合スコア116661

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

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

退会済みユーザー

退会済みユーザー

2021/03/18 11:10

大変失礼いたしました。 追記・修正しましたのでご確認いただけますでしょうか?
yambejp

2021/03/18 11:36

結果としてどういった出力を想定していますか?
退会済みユーザー

退会済みユーザー

2021/03/18 11:53

説明が足らずすみません、 質問内容に期待する結果を追記させていただきました。
yambejp

2021/03/18 12:14

Z001 I009,I010 Z002 I009,I010,I015 Z003 の根拠はどういうロジックなのでしょうか?
退会済みユーザー

退会済みユーザー

2021/03/18 12:36

記載したSQLの結果のZAIKO_IDが 例えば「Z001」のみだった場合、 ITEM_INFOのZAIKO_IDが「Z001」のITEM_ID、 ITEM_INFOのITEM_ID_GROUPの中のITEM_IDに紐付くZAIKO_IDが「Z001」のITEM_ID、 ITEM_INFOのZAIKO_ID_GROUPの中のZAIKO_IDが「Z001」のITEM_ID、 を、すべてカンマ区切りで出力させたいです。
yambejp

2021/03/18 12:44

item_infoのzaiko_idはz002ですよね? データと想定結果がリンクしてないのでは?
退会済みユーザー

退会済みユーザー

2021/03/18 13:10

すみません、INSERT文と想定結果内容を修正させていただきました!
yambejp

2021/03/18 13:17

ITEM_INFO_GROUPのinsertがprimaryの競合で失敗します
退会済みユーザー

退会済みユーザー

2021/03/18 13:50 編集

ITEM_INFO_GROUPテーブルは ITEM_ID_GROUPとITEM_IDがPKとなっていますが、 INSERT文で記載した通り、 同じITEM_ID_GROUP(IIG001等)で複数のレコードを持たせることで ITEM_IDをグループ化しています…
退会済みユーザー

退会済みユーザー

2021/03/21 14:29 編集

再度確認したところ、 仰る通りITEM_INFO_GROUPのinsertが 一部競合が生じる状態となっていたため修正しました。 申し訳ございません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問