この2つのテーブルをイメージしてください。
Table: Item
Columns: ItemID, Title
Table: Tag
Columns: TagID, ItemID, Title
これは、(テーブル構造を変更せずに(はい、正規化されていなくてもかまいません))、可能性の低いクエリを使用してすべてのタグが添付されたアイテムのリストを取得するための最良の方法です(つまり、10個のアイテムを取得するために11個のクエリを実行しません) )?
この2つのテーブルをイメージしてください。
Table: Item
Columns: ItemID, Title
Table: Tag
Columns: TagID, ItemID, Title
これは、(テーブル構造を変更せずに(はい、正規化されていなくてもかまいません))、可能性の低いクエリを使用してすべてのタグが添付されたアイテムのリストを取得するための最良の方法です(つまり、10個のアイテムを取得するために11個のクエリを実行しません) )?
これが単純な外部結合です。それはあなたが求めているものですか?
SELECT
It.ItemID,
It.Title [ItemTitle],
Tg.TagID,
Tg.Title [TagTitle]
FROM Item It
LEFT OUTER JOIN Tag Tg
ON It.ItemID = Tg.ItemID
あなたが何を求めているのか完全にはわかりませんが、これは役に立ちますか?
select Item.ItemID, Item.Title, Tag.TagID, Tag.Title from Item, Tag
where Item.ItemID=Tag.ItemID
11個のクエリを実行したくないと言う場合、11個のSQLクエリを実行したくないということですか、それとも10行で結果を受け取りたくないということですか。後者の場合、SQLの呼び出しに使用している言語に関係なく、結果をループする必要があることを意味していると思います。例:PHPの場合:
$query = "select Item.ItemID as i, Item.Title as t1, Tag.TagID as t, Tag.Title as t2 from Item, Tag where Item.ItemID=Tag.ItemID";
$dataset = mysql_query($query) or die(mysql_error());
$items = Array();
while ($data = mysql_fetch_assoc($dataset))
{
$items[$data['i']] = Array($data['t1'], $data['t'], $data['t2']);
}