質問: inner joinしてgroup byしたいんですが はじめまして。oracle初心者です。非常にハマって困っています。 テーブルaとbがあります。aには商品の一覧が、bには商品の複数の属性が格納されており、aとbをjoinすると、結果に商品が重複して含まれてしまいます。 select a.商品名,b.属性 from a inner join b on a.商品id=b.商品id; 結果 ------- 商品名1,属性あ 商品名1,属性い 商品名1,属性う 商品名2,属性あ .... テーブルbを使って、「属性あ」を持たない重複しない商品名の一覧を取得したいのですが、 select a.商品名,a.商品id from a inner join b on a.商品id=b.商品id and b.属性!='属性う' group by a.商品名,a.商品id これでできそうな気がするのですが、エラーになってしまいます。 本当はさらにwhereをつけて select a.商品名,a.商品id from a inner join b on a.商品id=b.商品id and b.属性!='属性う' group by a.商品名,a.商品id where a.商品名 like 'あ%'; とかもしたいのですが。。 oracleは10gです。 解決策を教えていただきたく、よろしくお願いします。
回答: 「属性あ」を持たないという条件はwhere句に記述し、重複を取り除くにはdistinctを使えばよろしいかと。 例) ----------------------------------------------------- select distinct a.商品名, a.商品id from a inner join b on a.商品id = b.商品id where b.属性 != '属性あ' ---------------------------------------------------------