SQL查询特殊条件

时间:2012-03-08 07:45:18

标签: sql db2

请帮我构建SQL查询... 我在DB2中有一个表,即SVA1ARTICLE,

表名:

SVA1ARTICLE

具有列

的表
ID
KEYWORD1
KEYWORD2
KEYWORD3
KEYWORD4

要求:

  1. 需要从所有4个单独的KEYWORDS COLUMN中找出至少重复100次的KEYWORD,即也是UNIQUE。对于前预算是COL KEYWORD1中的关键字,重复100次,然后结果将返回预算。同样适用于其他KEYWORD字段。

  2. 从上面的查询返回结果,我们需要找出同一个表中的所有列。即如果上面的查询返回“预算”作为关键字然后,我们需要查找具有关键字预算的所有记录,并给出前50个最新行。

  3. 请帮助你的战士谁是剑的边境,手上没有额外的弹药。

    谢谢, 角斗

2 个答案:

答案 0 :(得分:1)

我同意zxq9的帖子。您需要规范化数据库。中间时间:

“规范化”数据:

create view SVA1ARTICLE_N
as
   select ID, keyword1 as k
   from SVA1ARTICLE union all
   select ID, keyword2 as k
   from SVA1ARTICLE union all
   select ID, keyword3 as k
   from SVA1ARTICLE union all
   select ID, keyword4 as k
   from SVA1ARTICLE 
  

“找出所有4个至少重复100次的KEYWORD   个人关键词栏目“

create view key_100
as
   select k
   from SVA1ARTICLE_N
   group by k
   having count(*) > 100
  

“从结果返回上面的查询我们需要找出所有的   同一列中的列。即如果以上查询返回'预算'作为关键字   然后,我们需要查找具有关键字预算的所有记录   并给我们前50行。“

select distinct id
from SVA1ARTICLE_N
where k in (select k from key_100)

此查询返回符合条件的行的ID,可以自由查询从SVA1ARTICLE源表获取最后50行的查询。

答案 1 :(得分:0)

在我看来,您正在以困难的方式对数据进行建模。

使用SVA1ARTICLE中的ForeignKey创建KEYWORD表会更容易,并且从KEYWORD表中引用相同SVA1ARTICLE不能超过4次的引用约束会更容易。

如果你这样做,你的查询逻辑变得很多更简单,查询速度会增加(在KEYWORD上为存储的单词和对SVA1ARTICLE的引用创建一个索引),你就不会堆叠大量的子查询以获得您的结果,当规范更改为处理时,例如3或5个关键字(或无限制,这在现有模型中是不可能的),将很难调整。

使用新模型,您的问题将如何处理:

  1. 使用单独的KEYWORD表,您只需提取一个简单的查询,其中单词的出现超过任何阈值(在本例中为100)。

  2. 根据上述#1的结果,您只需简单查询所有包含> 100字的文章。

  3. 您可以使用子查询(#1)作为单个查询(#2)执行此操作,或者在应用程序中执行此操作,以构建#1的初始数据列表,然后再进行第二次查询#2。

    在您调整数据模型之前,使用代码详细回答此问题并不切实可行。