0

想象这两个表:

Table: Item
Columns: ItemID, Title

Table: Tag
Columns: TagID, ItemID, Title

哪个是最好的方法(不改变表结构(是的,我不介意它们是否没有标准化))使用不太可能的查询检索带有所有标签的项目列表(即不执行 11 个查询来检索 10 个项目)?

4

2 回答 2

1

这是一个简单的外部连接。这就是你所追求的吗?

SELECT
  It.ItemID,
  It.Title [ItemTitle],
  Tg.TagID,
  Tg.Title [TagTitle]
FROM Item It
LEFT OUTER JOIN Tag Tg
ON It.ItemID = Tg.ItemID
于 2009-01-30T10:59:41.593 回答
1

我不完全确定你在追求什么,但这有帮助吗?

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']);
}
于 2009-01-30T11:00:57.080 回答