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

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

ただいまの
回答率

90.47%

  • SQL

    2475questions

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

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

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 680

drunkdoll

score 93

ネットで調べてみたのですが、希望の内容が出てこず皆様のお知恵をお借りしたいです。
①で抽出したレコードを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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • rysh

    2016/04/13 10:09

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

    キャンセル

  • drunkdoll

    2016/04/13 15:03 編集

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

    キャンセル

  • drunkdoll

    2016/04/13 15:05

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

    キャンセル

回答 3

+1

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

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 15:08

    返信ありがとうございます。
    bindParamありでサブクエリ部分のみは、エラーがなく抽出ができ、bindParamなしでサブクエリを含む内容だとエラーになります。

    上記を踏まえるとPDOでサブクエリ自体が使えるのか疑問になってきました。
    今も調べていますが、何かご存知でしたら宜しくお願い致します。

    キャンセル

  • 2016/04/13 15:11 編集

    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

    キャンセル

  • 2016/04/13 16:33

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

    キャンセル

0

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

SELECT * 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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/12 18:21 編集

    ありがとうございます。
    下記のほうになります。
    ただ、やってみたのですが、まだエラーになっております。

    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 
    こちらはデータが取れています。

    キャンセル

  • 2016/04/12 18:54 編集

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

    キャンセル

  • 2016/04/13 13: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」のように、
    列に別名を付ければエラーは解消されます。

    キャンセル

  • 2016/04/13 14:11

    nabe3さん
    情報ありがとうございます。

    どなたかご存知でしたら、PDOでbindParamを使っているサブクエリは使えるのでしょうか?

    下記のエラーが出てしまっています
    Fatal error: Call to a member function bindParam() on a non-object in

    キャンセル

関連した質問

同じタグがついた質問を見る

  • SQL

    2475questions

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