MySQL4.0.25 についての質問です。



SELECT
t.storyid as storyid,○
t.shop_cat_id as shop_cat_id,○
s.title as title,
s.title_r as title_r,
s.salescopy_01 as salescopy_01,
p.ken as address_01,●
s.address_02 as address_02,
s.phone_0101 as phone_0101,
s.phone_0102 as phone_0102,
s.phone_0103 as phone_0103,
s.site_url as site_url
FROM
shop_cat_to_subcat_to_shop as t○
LEFT JOIN○
shop_master as s
LEFT JOIN●
prefecture_master as p●
ON
t.storyid = s.storyid○
AND○
t.shop_cat_id = $shop_cat_id○
AND●○
s.address_01 = p.id●


このSQL文は文法的に間違いがありますか?シンタックスエラーが出ます。
書ききれないので、コメント欄に続きがあります。

回答の条件
  • 1人1回まで
  • 登録:2007/03/31 18:52:10
  • 終了:2007/04/01 10:32:54

回答(1件)

id:chuken_kenkou No.1

chuken_kenkou回答回数722ベストアンサー獲得回数542007/03/31 20:30:27

ポイント60pt

意味が違ってくるかどうかまで検証できていないですが、「onでの条件指定」の記述位置と「参照する表」の記述位置がおかしいと思います。

SELECT
 t.storyid as storyid,
 t.shop_cat_id as shop_cat_id,
 s.title as title,
 s.title_r as title_r,
 s.salescopy_01 as salescopy_01,
 p.ken as address_01,
 s.address_02 as address_02,
 s.phone_0101 as phone_0101,
 s.phone_0102 as phone_0102,
 s.phone_0103 as phone_0103,
 s.site_url as site_url
FROM shop_cat_to_subcat_to_shop as t
 LEFT JOIN shop_master as s
  ON t.storyid = s.storyid AND t.shop_cat_id = $shop_cat_id
 LEFT JOIN prefecture_master as p
  ON s.address_01 = p.id
id:seadwell

返事遅くなってスミマセン。動きました^^

ひとつjoinするごとに、それに対するonかusingを書かないといけないのですね。

データ検証はまだですが、とりあえず動かないとなんもできませんから・・・

ありがとうございました。

2007/04/01 10:31:46
  • id:seadwell
    ●の部分を取り除き実行してみましたが正常に動作します。○の部分を取り除くことも試しましたが正常動作します。
    つまり、私の知っている文法では表結合を行う際3っつ以上のテーブルを指定できないのでは?と思っています。3っつ以上指定するやり方があると思うのですが・・・参考書やネットの例題は2つまでで確認が取れません。

    ○と●は付けないで実行しています。
    あと変数の中身はechoで確認してあります。
    PEARのDBクラスを使用していますので、;は付けていません。EOSの中ををコピペしています。

    この質問はテーブル構造や変数の中身は何回も確認してますので無視し、DBクラスを絡めた文法の質問を重視してください。

    前回http://q.hatena.ne.jp/1175208593の続きですが前回の質問はあまり関係ないかもしれません。
    よろしくお願いします。
  • id:seadwell
    nandedarouさま

    コメントは削除されているようですが、いろいろなご指導ありがとうございます。
    私は、独学なので経験豊富な方の助言は非常に勉強になります。
    また、当方の稚拙な質問や考えなどをわざわざ気にしていただき、また、検証までされて回答されていることが非常にうれしく思います。

    > 値は、'$shop_cat_id'のように、コーテーションで囲む癖をつけた方がいいと思います。
    このようなアドバイスは一人で学習しているものにとっては考えもつかないことでして、ありがたい限りなのです。
    nandedarouさんや皆さんのおかげで、少しずつ上達していると思いますが、今後もくだらないことでつまづくかもしれません。
    そのときは面倒を見てやってください^^
  • id:nandedarou
    書いたり消したりしてすみません。大したことじゃないので、余計なことかなぁと思いまして消しました。

    では、やはり大したことではないのですが、もうちょっと書きます。

    フィールド名の前のt. s. p. は、同じ名前のフィールドがSQL内の他のテーブルにないなら、つけなくても構いません。(つけた方がどのテーブルのフィールドかが人間にわかり易いので、あえてつけるのもありだとは、思います。)

    フィールド名の後のasについては、消したコメントに書いたとおり、フィールド名を変更しないならば、つける必要はありません。

    あと、これはseadwellさんが何をしたいかによって違ってくるのですが、もし$shop_cat_idに対応したものだけ抽出したいなら、次のようにwhereを使った方がいいように思います。
    SELECT
    t.storyid,
    t.shop_cat_id,
    s.title,
    s.title_r,
    s.salescopy_01,
    p.ken as address_01,
    s.address_02,
    s.phone_0101,
    s.phone_0102,
    s.phone_0103,
    s.site_url
    FROM
    shop_cat_to_subcat_to_shop as t
    LEFT JOIN shop_master AS s USING(storyid)
    LEFT JOIN prefecture_master AS p ON s.address_01 = p.id
    WHERE t.shop_cat_id = '$shop_cat_id'
  • id:seadwell
    nandedarou さま

    お礼が遅くなり失礼しました。出張が重なり・・・^^;
    前回http://q.hatena.ne.jp/1175208593の質問で、あまりwhereを使ってはいけないのか?と思っていましたが、使ったほうが明示的になる場合whereの必用もあるということですね^^
    ありがとうございます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません