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

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

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

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

Q&A

解決済

3回答

2406閲覧

PDOでbindParamを使っているサブクエリを利用したRIGHT JOINなど 2つ以上について

drunkdoll

総合スコア128

SQL

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

0グッド

0クリップ

投稿2016/04/12 09:04

編集2016/04/13 06:01

ネットで調べてみたのですが、希望の内容が出てこず皆様のお知恵をお借りしたいです。
①で抽出したレコードをCの表にRIGHT JOINさせたいのですが、記述方法のご教示を宜しくお願い致します。

①SELECT * FROM a INNER JOIN b ON a.XXX = b.XXX WHERE a.YYY = x

②で記述するとエラーになってしまっています
②SELECT * FROM ( a INNER JOIN b ON a.XXX = b.XXX WHERE a.YYY = x ) RIGHT JOIN c ON c.ZZZ = b.ZZZ

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

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

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

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

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

rysh

2016/04/13 01:09

エラーが出ているのであればエラーの内容も書いてください。
drunkdoll

2016/04/13 06:03 編集

下記のエラーが出てしまっています。宜しくお願い致します。 Fatal error: Call to a member function bindParam() on a non-object in ~
drunkdoll

2016/04/13 06:05

bindParamをなくすと下記のエラーになりました Fatal error: Call to a member function execute() on a non-object in ~
guest

回答3

0

やっと原因がわかりました。
サブクエリ内の*が問題でした。明示的にカラムを指定したら、データ抽出に成功しました。
ご返信いただいた皆様ありがとうございました!
サブクエリもっと勉強します。

SELECT * FROM ( select a.HHH from a INNER JOIN b ON a.XXX = b.XXX WHERE A.YYY =:x ) AS X RIGHT JOIN c ON c.ZZZ = X.ZZZ

投稿2016/04/13 07:08

編集2016/04/13 07:10
drunkdoll

総合スコア128

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

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

0

ベストアンサー

どなたかご存知でしたら、PDOでbindParamを使っているサブクエリは使えるのでしょうか?
下記のエラーが出てしまっています
Fatal error: Call to a member function bindParam() on a non-object in

実装コードが見えないので分かりませんが、
bindParamする書き方に問題があるのではないでしょうか?
http://learnaboutphpmysql.blogspot.jp/2010/10/call-to-member-function-bindparam-on.html

単純なクエリでBindParamを実装してみて、エラーになるようならBindParamの書き方の問題、
エラーにならないならば、サブクエリの書き方の問題だと思います。

投稿2016/04/13 05:36

編集2016/04/13 05:57
yodel

総合スコア508

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

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

drunkdoll

2016/04/13 06:08

返信ありがとうございます。 bindParamありでサブクエリ部分のみは、エラーがなく抽出ができ、bindParamなしでサブクエリを含む内容だとエラーになります。 上記を踏まえるとPDOでサブクエリ自体が使えるのか疑問になってきました。 今も調べていますが、何かご存知でしたら宜しくお願い致します。
drunkdoll

2016/04/13 06:12 編集

MYSQLを利用しているため、ryshさんに教えていただいたものに一部ASを追加し, bindParamも追加しています。 ◇利用した内容 SELECT * FROM ( select * from a INNER JOIN b ON a.XXX = b.XXX WHERE A.YYY =:x ) AS X RIGHT JOIN c ON c.ZZZ = X.ZZZ
drunkdoll

2016/04/13 07:33

ご指摘のとおりサブクエリの書き方の問題でした。ありがとうございました
guest

0

サブクエリーの書き方を確認した方がいいですよ

SQL

1SELECT * FROM ( select * from a INNER JOIN b ON a.XXX = b.XXX WHERE A.YYY = x ) X RIGHT JOIN c ON c.ZZZ = b.ZZZ

あるいは、こう書きたいのでしょうか?

SQL

1SELECT * FROM a 2INNER JOIN b ON a.XXX = b.XXX 3RIGHT JOIN c ON c.ZZZ = X.ZZZ 4WHERE A.YYY = x

投稿2016/04/12 09:16

編集2016/04/13 01:08
rysh

総合スコア874

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

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

drunkdoll

2016/04/12 09:32 編集

ありがとうございます。 下記のほうになります。 ただ、やってみたのですが、まだエラーになっております。 SELECT * FROM ( select * from a INNER JOIN b ON a.XXX = b.XXX WHERE A.YYY = x ) X RIGHT JOIN c ON c.ZZZ = X.ZZZ select * from a INNER JOIN b ON a.XXX = b.XXX WHERE A.YYY = x  こちらはデータが取れています。
drunkdoll

2016/04/12 09:58 編集

自分の凡ミスを含め何度も見直しているのですが、解決に至っておりません PDOのプリペアドステートメントで記述しようとしているのが原因なのでしょうか?
nabe3

2016/04/13 04:01

MySQLで実行すると「select * from a INNER JOIN b ON a.XXX = b.XXX」の部分で、 「SQL エラー (1060): Duplicate column name 'XXX'」というエラーが出ました。 もしこのエラーが発生しているのであれば、カッコ内の部分を「select *」ではなく 「select a.XXX, a.YYY, b.ZZZ」のようにテーブルと列を明示するか、 「select a.XXX as a_XXX, b.XXX as b_XXX, a.YYY, b.ZZZ」のように、 列に別名を付ければエラーは解消されます。
drunkdoll

2016/04/13 05:11

nabe3さん 情報ありがとうございます。 どなたかご存知でしたら、PDOでbindParamを使っているサブクエリは使えるのでしょうか? 下記のエラーが出てしまっています Fatal error: Call to a member function bindParam() on a non-object in
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問