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

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

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

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

SQL

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

Q&A

解決済

3回答

544閲覧

クエリを結合した結果がうまく出力できない

yamaguti

総合スコア185

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

SQL

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

0グッド

0クリップ

投稿2017/09/16 16:44

編集2017/09/17 05:40

お世話になります。
SQLで結合して汎用マスターの名称を出力したいのですが、
結果がNULLになってしまいます。
間違っている部分をご教示いただければ幸いです。

宜しくお願い致します。

ID CD 年月日 入出金区分 金額 銀行名 1 1 2017/09/10 1 1000 三菱東京UFJ銀行
大分類 中分類 名称 3 1 入金 3 2 出金

SQL

1select 2 入出金テーブル.CD 3 , 入出金テーブル.年月日 4 , 入出金テーブル.入出金区分 5 , 汎用マスター.大分類 6 , 汎用マスター.中分類 7 , 汎用マスター.名称 8from 9 入出金テーブル 10 left join 汎用マスター 11 on 汎用マスター.中分類 = 入出金テーブル.入出金区分 12 and 汎用マスター.大分類 = '3'
CD 年月日 入出金区分 大分類 中分類 名称 1 2017/09/10 1 ​(NULL)​ ​(NULL)​ ​(NULL)​

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

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

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

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

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

miyahan

2017/09/16 23:40

少なくとも MySQL 5.7 では正しく実行されます。DBMS環境は何でしょうか?(できればタグも追加してください)
A.Ichi

2017/09/17 03:08

postgres, Mysql, Oracleでは正しく出力される様です。
yamaguti

2017/09/17 05:36

SQLライトになります
guest

回答3

0

ベストアンサー

多分、格納されているデータ起因じゃないかと思われます。

汎用マスターの大分類・中分類および 入出金テーブルの入出金区分が全て数値型であれば、
問題なく取得できているだろうと思います。

上記項目に一部文字型があった場合には、格納されている内容によっては一致しなくなります。
分類でのコード体系は一般的に桁数を揃えるので、ゼロ埋めがされているかもしれません。

そうでない場合は、空白が詰められているかもしれませんので、試しに以下を実行しデータが取得できるようであれば、そういうことでしょう。

SQL

1select * 2from 3 入出金テーブル 4 left join 汎用マスター 5 on trim(汎用マスター.中分類) = trim(入出金テーブル.入出金区分) 6 and trim(汎用マスター.大分類) = '3'

SQLiteは詳しくないのですが、ググってみてびっくりしました。
https://android.g.hatena.ne.jp/lnznt/20101109/1289259371
テーブル定義で指定した属性に関わらず、データ入力時の属性によって属性が変わることがあるようですね。
なのに、型変換用の関数は用意されていない。
じゃあ、暗黙の変換はどのように行われるのか、、、というところまでは調べていません。

何にしても、格納されているデータについては確認した方が良さそうですね。

投稿2017/09/17 14:28

sazi

総合スコア25195

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

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

yamaguti

2017/09/19 13:55

ありがとうございます。 こちらのクエリでデータ取得されました、、
yamaguti

2017/09/19 14:01

調査してみますありがとうございます。
guest

0

MySQL と SQLite で試してみましたが、意図した結果が得られます。

log

1sqlite> SELECT 2 ...> 入出金テーブル.CD, 3 ...> 入出金テーブル.年月日, 4 ...> 入出金テーブル.入出金区分, 5 ...> 汎用マスター.大分類, 6 ...> 汎用マスター.中分類, 7 ...> 汎用マスター.名称 8 ...> FROM 9 ...> 入出金テーブル 10 ...> LEFT JOIN 汎用マスター 11 ...> ON 汎用マスター.中分類 = 入出金テーブル.入出金区分 12 ...> AND 汎用マスター.大分類 = 3; 131|2017-09-10|1|3|1|入金

SQL文ではなく、スキーマや格納されているデータに何らかの不備があると思います。今一度確認してみてください。

できれば新しい環境を用意し、コピーではなくテーブル・ダミーデータを手打ちで作成して再現するか試すのもよいと思います。思いもよらないところに凡ミスが潜んでいるものです。

投稿2017/09/17 05:57

miyahan

総合スコア3095

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

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

0

今の質問文の状態であれば大分類3、中分類1が入った結果が正しく得られるはずです

投稿2017/09/16 23:40

編集2017/09/16 23:58
SVC34

総合スコア1149

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問