- PR -

MySQLのSQL文(JOIN)について

1
投稿者投稿内容
400
会議室デビュー日: 2005/08/08
投稿数: 5
投稿日時: 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するデータを絞り込む部分がエラーとなっていると思われます。ご存知でしたら教えてください。

117
ベテラン
会議室デビュー日: 2005/05/09
投稿数: 94
お住まい・勤務地: 大阪府
投稿日時: 2005-08-08 21:25
MySQL4.0xはサブクエリに対応してなかったかと。
MySQL4.1以降で対応してます。
_________________
# Future Is On Fire !
400
会議室デビュー日: 2005/08/08
投稿数: 5
投稿日時: 2005-08-08 21:33
ご返信有難うございます。
マニュアルでMySQL4.0xがサブクエリ対応していない事を確認できました。
このような場合、どのようにデータを絞り込みJOINをすれば良いのでしょうか。
他に書き方はありますでしょうか。
117
ベテラン
会議室デビュー日: 2005/05/09
投稿数: 94
お住まい・勤務地: 大阪府
投稿日時: 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 ]
400
会議室デビュー日: 2005/08/08
投稿数: 5
投稿日時: 2005-08-09 19:05
temporaryを作成する方法で試してみたところ、無事SQLを実行する事が出来ました。
今回は、MySQLのバージョンを上げずにこの方法でいこうと思っています。

有難うございました。また、何かありましたら宜しくお願い致します。
1

スキルアップ/キャリアアップ(JOB@IT)