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

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

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

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

Q&A

解決済

1回答

16929閲覧

SQLによる複数テーブルからの結合データ抽出のエラー

cd987456

総合スコア33

SQL

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

0グッド

0クリップ

投稿2017/04/13 09:22

編集2017/04/14 00:15

SQLのSELECT文でOracle Database抽出しようとしています。
下記の場合の抽出方法が分かりません。

内容は2つのテーブルがあります。
【製品構成テーブル】と【品名テーブル】の2種類です。

【製品構成テーブル】
フィールドは2つで”CODE”と”KCODE”です。
CODEは商品品番、KCODEはその商品の構成部品のイメージです。

CODE KCODE
A123 C45
A123 D46
A123 E47
B132 G67
B132 C45
B132 E47

【品名テーブル】
フィールドは2つで”CODE”と”NAME”です。
CODEは商品品番、構成部品、全てのコードが入っています。
NAMEはそれぞれの名前です。

CODE NAME
A123 テレビ
B132 プレーヤー
C45 抵抗
D46 コンデンサ
E47 LED
G67 トランジスタ

★それぞれのテーブルを結合し下記のように抽出したいです。

CODE NAME KCODE NAME
A123 テレビ C45 抵抗
A123 テレビ D46 コンデンサ
A123 テレビ E47 LED
B132 プレーヤー G67 トランジスタ
B132 プレーヤー C45 抵抗
B132 プレーヤー E47 LED

品名テーブルをAS句を使って別名でH1、H2としています。

SELECT 製品構成テーブル.CODE , H1.NAME , 製品構成テーブル.KCODE , H2.NAME
FROM 製品構成テーブル
LEFT JOIN 品名テーブル AS H1 ON 製品構成テーブル.CODE = H1.CODE
LEFT JOIN 品名テーブル AS H2 ON 製品構成テーブル.KCODE = H2.CODE

【ORA-00905: キーワードがありません。】のメッセージが出てエラーになります。
コードに間違いがあれば、教えて頂きたいです。

★テーブル名は英数字表記しています。
VBAのADODB.ConnectionオブジェクトとSQL文を使ってエクセルにデータ抽出しようとしています。
実際のコードとテーブル名を記載します。

品名テーブル・・XHEAD
製品構成テーブル・・XPRTS

Dim strSQL As String strSQL = "select XPRTS.CODE,H1.NAME,XPRTS.KCODE,H2.NAME" strSQL = strSQL & " from XPRTS" strSQL = strSQL & " left join XHEAD As H1 on XPRTS.CODE = H1.CODE" strSQL = strSQL & " left join XHEAD As H2 on XPRTS.KCODE = H2.CODE"

XHEAD As H1、XHEAD As H2 と別名に置き換えずにXPRTS.CODEに対してXHEAD.NAMEを
結合するだけだと上手く抽出できています。

strSQL = "select XPRTS.CODE,XHEAD.NAME,XPRTS.KCODE" strSQL = strSQL & " from XPRTS" strSQL = strSQL & " left join XHEAD on XPRTS.CODE = XHEAD.CODE"

なので、ADODB.Connectionオブジェクトなどのコードに問題はないと思い、
上記コードから省略しています。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/04/13 09:24

テーブルの名前は、本当に日本語名でしょうか、それとも英数字表記しているのでしょうか。
Orlofsky

2017/04/13 14:45

質問に SELECT 以外に CREATE TABLE, INSERT も提示されては? SQLは方言もあるので<Oracle> タグも追加しましょう。テーブル名や列名などにマルチバイト文字を使う時は、ダブルクォーティングして ... FROM "品構成テーブル" しないと動作保障されません。
guest

回答1

0

ベストアンサー

Oracleではテーブルの別名に As を入れるとエラーになりますので、As を除いてください。

投稿2017/04/14 02:19

hihijiji

総合スコア4150

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問