简化情况: 我有一个表,让我们称之为标题,例如主键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。这是一个更好的主意吗?
感谢您的意见
答案 0 :(得分:1)
您可以执行左连接,然后过滤以仅在左表中获取具有空值的行。
SELECT [cols]
FROM header
LEFT JOIN filters
ON header_id=h_id
WHERE [filter col] IS NULL
根据表的描述,在头表中有一个过滤列是一个非常糟糕的主意。这会导致一些非常低效的查询。