ここから本文です

解決済みの質問

select文の外部結合について

heke_taroさん

select文の外部結合について

いつもお世話になります。
select文について質問です。以下のように2つのテーブルがありtable1は全レコード抽出し、table2はtable1に条件合致している場合のみtable2の項目を抽出しますがtable2の項目が全く取得できません。
ちなみにMS_AccessにてODBC経由でMySQLに接続し、選択クエリを作成しSQL文を確認しましたが、私が作成したphp上のSQL文と基本的に相違はありませんでした。
(※環境は、php4+MySQL)

table1:
・col1(主キー)
・col2
・col3

table2:
・colA(主キー)
・colB(主キー)
・colC(主キー)
・colD
・colE

select t1.col1,t1.col2,t1.col3,t2.colD,t2.colE
from (table1 as t1 LEFT JOIN table2 as t2
ON (t1.col1 = t2.colA) and (t1.col3 = t2.colC))
order by t1.col1

以上、よろしくお願い致します。

補足
MySQLのバージョンは3.23.54です。
MyODBCは、MYSQL専用ODBCドライバ「MyODBC」です。
(t1.col1 = t2.colA) and (t1.col3 = t2.colC)の条件に合致するデータは
table2に存在します。

違反報告

ベストアンサーに選ばれた回答

forwardno1さん

LEFT JOIN に問題あるとおもいます。
理由:
t1.col1 は主キーですから、一つしか存在しまん。
table2:
・colA(主キー)
・colB(主キー)
・colC(主キー)をあわせてユニークになりますから
>ON (t1.col1 = t2.colA) and (t1.col3 = t2.colC) 条件は
tiのレコードに対し条件に合うt2には複数存在します。
それを全部取得したいですよね。

解決方法:

LEFT JOIN → RIGHT JOIN

LEFT JOIN →FULL OUTER JOIN
DB管理システムによっては
LEFT JOIN →JOIN

つまり、左結合がまずかったです。

この質問は投票によってベストアンサーが選ばれました!

この質問・回答は役に立ちましたか?
役に立った!

お役立ち度:お役立ち度 1点(5点満点中)1人が役に立つと評価しています。

ベストアンサー以外の回答

(2件中1〜2件)

並べ替え:回答日時の
新しい順
古い順

 

bc234567890さん

SQLとしては間違っているように見えません。
このSQLはMySQLクライアントから実行して確認してみたのですか?

ACCESSとかODBCは使ったことないので、原因かどうかわかりません。

chuuken_ken_kouさん

MySQLのバージョンは?
ODBCドライバは、誰が提供しているドライバですか?

>(t1.col1 = t2.colA) and (t1.col3 = t2.colC)

この条件を満たすデータは、table2に存在するのですか?

この質問に付けられたタグ

タグとは

知恵ノートとは?

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。

お客様自身の責任と判断で、ご利用ください。

ただいまの回答者

05時07分現在

769
人が回答!!

1時間以内に1,284件の回答が寄せられています。

>>回答ひろばに行く


知恵コレに追加する

閉じる

知恵コレクションをするID/ニックネームを選択し、「追加する」ボタンを押してください。
※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。

ほかのID/ニックネームで利用登録する