SQL设计:查找不在不同表上的行

时间:2012-08-29 18:28:53

标签: sql

简化情况: 我有一个表,让我们称之为标题,例如主键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和一个带有描述过滤器的文本的属性。

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

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

感谢您的意见

1 个答案:

答案 0 :(得分:1)

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

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

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