2011-01-13 5 views
0

私は2つのテーブルを持っています:クラスとインストラクター。多くの参照があるときにテーブルを効率的にクエリ

class 
id: int 
title: varchar(45) 

instructor 
id: int 
class_id: int 
name: varchar(45) 

の1つのクラスに関連付けられている2人のインストラクターがあるとしましょう:

INSERT INTO `class` VALUES(1, 'Class Number 1'); 
INSERT INTO `instructor` VALUES (1, 1, 'John Smith'); 
INSERT INTO `instructor` VALUES (2, 1, 'Jane Smith'); 

は、どのように私はインストラクターの名前のクラスのリストを照会については行くのですか?私はクエリーについて考えた2つの方法があり、より効率的な方法を望んでいました。

  1. クエリごとに一度クラスclass FROM

    SELECT *; SELECT * FROM instructor WHERE class_id =?;

  2. クエリ一緒class C、instructor I、c FROM

    SELECT *複数の行で同じクラスを持つ彼ら。 id = iclass_id GROUP BY cid;

インストラクターがカンマで区切られたクラスリストの出力を期待していたのは何ですか?

+0

これにはプラットフォーム固有のアプローチがあります。どのデータベースを使用しているか教えていただけますか? –

+0

MySQLサーバ5.0 – stan

答えて

1

MySQLでは、GROUP_CONCAT集合関数を使用できます。 these notesにご注意ください。

ほとんどの場合、2つの方法のうち、後者の方法は、多くのクエリに時間がかかるため、高速です。

+0

ありがとう、これは私が探していたものです – stan

0
SELECT c.title, GROUP_CONCAT(i.name) 
FROM class c, instructor i 
WHERE c.id = i.class_id GROUP BY c.id;