- - PR -
MySQLのSQL文(JOIN)について
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2005-08-08 21:22
MySQL(Ver4.0.24)上の2つテーブルをJOIN(LEFT or RIGHT)し、データを抽出したいのですが、エラーとなってしまい困っています。全く同様のテーブルをMS-Accessに作成し、同様のSQL文を発行すると正常にレコードを抽出出来る状況です。
何かおかしな部分がありましたら、ご指摘をお願いいたします。 以下が実行しているSQL文です。 SELECT A.INT_PROJECT_NO, A.STR_PROJECT_NAME, A.DTM_START_PLAN, A.DTM_END_PLAN, A.STR_CREATE_NAME, A.INT_STATUS, C.INT_ACCESS_CNT FROM (SELECT B.INT_PROJECT_NO, B.INT_ACCESS_CNT from B where B.STR_GUEST_ID = 'abc') AS C RIGHT JOIN A ON C.INT_PROJECT_NO = A.INT_PROJECT_NO WHERE (((A.INT_PROJECT_NO) Like '%テスト%')) OR (((A.STR_PROJECT_NAME) Like '%テスト%')); 実行後のエラーメッセージを読むとマニュアルを読め的なメッセージ(ERROR1064)が出ています。 FROM節でサブクエリを実行し、JOINするデータを絞り込む部分がエラーとなっていると思われます。ご存知でしたら教えてください。 |
|
投稿日時: 2005-08-08 21:25
MySQL4.0xはサブクエリに対応してなかったかと。
MySQL4.1以降で対応してます。 _________________ # Future Is On Fire ! |
|
投稿日時: 2005-08-08 21:33
ご返信有難うございます。
マニュアルでMySQL4.0xがサブクエリ対応していない事を確認できました。 このような場合、どのようにデータを絞り込みJOINをすれば良いのでしょうか。 他に書き方はありますでしょうか。 |
|
投稿日時: 2005-08-08 23:31
MySQLのバージョンを上げるというのは無しとするとTemporaryテーブルを作って
結合するという手があります. 提示されたSQLで言うと CREATE TEMPORARY TABLE C SELECT B.INT_PROJECT_NO, B.INT_ACCESS_CNT FROM B WHERE B.STR_GUEST_ID = 'abc' てな具合にサブクエリの内容をテーブルCとして作ってしまい, SELECT A.INT_PROJECT_NO, A.STR_PROJECT_NAME,( 中略 ) FROM C JOIN A ON A.C.INT_PROJECT_NO = A.INT_PROJECT_NO (後略) のように結合して取得します. _________________ Future Is What We Are! [ メッセージ編集済み 編集者: 117 編集日時 2005-08-09 09:18 ] |
|
投稿日時: 2005-08-09 19:05
temporaryを作成する方法で試してみたところ、無事SQLを実行する事が出来ました。
今回は、MySQLのバージョンを上げずにこの方法でいこうと思っています。 有難うございました。また、何かありましたら宜しくお願い致します。 |
1
