0

简化情况:我有一个表,我们称它为表头,例如主键 header_ID 和其他一些属性

我将需要用不同的过滤器标记这些行。我无法提前知道有多少,但对于大多数行来说,它将在 0 到 10 之间。

所以,我想创建另一个表(我们称之为过滤器),其属性为 h_ID 和 filter_ID。因此,如果此表具有以下内容,则表示 header_ID=2 使用过滤器 1 和 3 进行标记,而 header_ID=3 使用过滤器 1

2 1 2 3 3 1

然后,另一个带有 filter_ID 的表和一个带有一些描述过滤器的文本的属性。

例如,我看到自己经常做的基本查询是“从没有任何过滤器的标题中获取某些行”。这是使这些类型的查询高效的设计吗?如果是这样,怎么做?

我正在考虑可能在标题中添加一个 filter_ID 列,并用 filter_ID 主键替换 header_ID 列,当没有分配过滤器时,标题中的值为 NULL。这是一个更好的主意吗?

感谢您的意见

4

1 回答 1

1

您可以进行左连接,然后过滤以仅获取左表中具有空值的行。

SELECT [cols]
FROM header
LEFT JOIN filters 
ON header_id=h_id
WHERE [filter col] IS NULL

根据您的表的描述,在标题表中有一个过滤器列将是一个非常糟糕的主意。这会导致一些非常低效的查询。

于 2012-08-29T18:50:41.980 回答