- ベストアンサー
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一覧を抽出するという方法をとっています。(わかりにくいでしょうか・・・) これでもできるのですが すこし効率が悪い気がしましたので・・・
- みんなの回答 (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;
その他の回答 (1)
- nyaa519323116
- ベストアンサー率51% (41/79)
今、手元にmySQLの環境がないので確認はできないのですが、外部JOINでできそうです。 SELECT T1.品物ID,T2.属性ID,T2.属性名 FROM テーブル1 T1 RIGHT JOIN テーブル2 T2 ON T1.属性ID=T2.属性ID こんな感じです。
お礼
ありがとうございます、無事解決しました!
お礼
丁寧なご解答ありがとうございました。 上記の方法で値を求めることが出来ました!