perlのDBIx::ClassでのLEFT JOINについて教えてください。


テーブル間関係の定義ならbelongs_toでいけるようなのですが、LEFT JOIN ON ...の部分に単テーブル条件を含ませる方法が判りません。

つまり、例えば顧客の購入していない商品を商品マスタから抽出する場合、SQLですと

SELECT master.*
FROM master
LEFT JOIN purchase
ON master.id = purchase.item_id AND
purchase.user_id = 12345
WHERE purchase.user_id IS NULL

で一発で検索できますが、DBIx::Classの場合、LEFT JOIN ON ...中の、
  
master.id = purchase.item_id

のような条件はbelongs_toで設定できるようですが、

purchase.user_id = 12345

のような条件がどうやって設定すればいいのか判りません。

上記をWHERE句に移すと、

SELECT master.*
FROM master
LEFT JOIN purchase
ON master.id = purchase.item_id
WHERE purchase.user_id = 12345 AND purchase.user_id IS NULL

また別の意味になってしまう(検索結果なしになる)ので、困っています。

DBIx::Classで上記のようなSQLを打つ方法を教えていただければ幸いです。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2008/04/29 12:30:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:ken33jp No.2

回答回数928ベストアンサー獲得回数13

ポイント10pt

設計ミスです。小手先の解決策はないです。

http://q.hatena.ne.jp/answer

コメントはまだありません

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

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

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

回答リクエストを送信したユーザーはいません