• ベストアンサー

MYSQLでこんな結果を求める事はできますか?

MYSQLで少し行き詰っています。 下記のようなテーブルをつくりました。 テーブル1 品物ID  属性ID -------------------- A    1 A    3 B    1 B    2 C    4 テーブル2 属性ID  属性名 -------------------- 1    香りがいい 2    美味しい 3    値段が高い 4    貴重 この二つのテーブルを結合して 任意の値(品物)を含めた結果と属性名の一覧を抽出したいと考えています。ちょっと説明しづらいのですが 例えばAを含めた結果と属性の一覧なら A 1 香りがいい 2 美味しい A 3 値段が高い  4 貴重 Bを含めた結果なら B 1 香りがいい B 2 美味しい  3 値段が高い  4 貴重 といった結果をだしたいのですが こんなことはできるでしょうか? 私の思いつく限りでは テーブル1とテーブル2を結合して任意の品物IDが含まれる結果を求めた後 もういちどsql文を発行して上記から求めた結果の属性IDを含まない 属性ID一覧を抽出するという方法をとっています。(わかりにくいでしょうか・・・) これでもできるのですが すこし効率が悪い気がしましたので・・・

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

MySQLの質問をする場合は、バージョンを明記してください。4.0、4.1、5.0~で機能が大幅に拡張されています。 -- テスト用表定義 create table t1 (sid char(1), zid int); create index t1ix1 on t1(zid); create table t2 (zid int primary key, zname varchar(10)); -- テスト用データ格納 insert into t1 values ('A',1), ('A',3), ('B',1), ('B',2), ('C',4); insert into t2 values (1,'香りがいい'), (2,'美味しい'), (3,'値段が高い'), (4,'貴重'); -- 検索1 select sid,t2.zid,zname from t1 right join t2 on t1.zid=t2.zid and sid='A' order by t2.zid ; -- 検索2 select sid,t2.zid,zname from t1 right join t2 on t1.zid=t2.zid and sid='B' order by t2.zid ; -- テスト用表削除 drop table t1; drop table t2;

noname#65125
質問者

お礼

丁寧なご解答ありがとうございました。 上記の方法で値を求めることが出来ました!

その他の回答 (1)

回答No.1

今、手元にmySQLの環境がないので確認はできないのですが、外部JOINでできそうです。 SELECT T1.品物ID,T2.属性ID,T2.属性名 FROM テーブル1 T1 RIGHT JOIN テーブル2 T2 ON T1.属性ID=T2.属性ID こんな感じです。

noname#65125
質問者

お礼

ありがとうございます、無事解決しました!

関連するQ&A