【发布时间】:2011-04-19 08:01:27
【问题描述】:
假设我有 2 个表,一个称为类别,一个称为 cat_pages。
类别表具有列 ID、标题和时间戳。例如:
CREATE TABLE categories (
id INT UNSIGNED PRIMARY KEY,
title VARCHAR(32),
`timestamp` TIMESTAMP,
INDEX (title)
) Engine=InnoDB;
cat_pages 有 2 列,cat_id 和 page_id:
CREATE TABLE cat_pages (
cat_id INT UNSIGNED
REFERENCES categories (id)
ON DELETE CASCADE ON UPDATE CASCADE,
page_id INT UNSIGNED
REFERENCES pages (id)
ON DELETE CASCADE ON UPDATE CASCADE,
UNIQUE INDEX (cat_id, page_id),
INDEX (page_id, cat_id),
) Engine=InnoDB;
我正在尝试将类别表与 ID 上的 cat_pages 表连接起来,这样
- 仅检索在 category_pages 表中具有 id 的类别并
- 每个类别在结果集中只显示一次
查询:
SELECT * FROM categories as c
LEFT JOIN cat_pages as p ON c.id = p.cat_id
生成一个类别重复多次的结果集(因为 cat_pages 表中有多个匹配项。我需要什么才能使每个类别仅显示一次,如果 cat_pages 中没有匹配项则根本不显示桌子?
【问题讨论】:
-
从查询中删除 LEFT 以达到第一点
-
代码为王。描述表的最佳方式是给出表创建语句,以及用于示例数据的
INSERT语句。您提供的SELECT查询非常有助于描述您想要什么。