请帮我构建SQL查询... 我在DB2中有一个表,即SVA1ARTICLE,
表名:
SVA1ARTICLE
具有列
的表ID
KEYWORD1
KEYWORD2
KEYWORD3
KEYWORD4
要求:
需要从所有4个单独的KEYWORDS COLUMN中找出至少重复100次的KEYWORD,即也是UNIQUE。对于前预算是COL KEYWORD1中的关键字,重复100次,然后结果将返回预算。同样适用于其他KEYWORD字段。
从上面的查询返回结果,我们需要找出同一个表中的所有列。即如果上面的查询返回“预算”作为关键字然后,我们需要查找具有关键字预算的所有记录,并给出前50个最新行。
请帮助你的战士谁是剑的边境,手上没有额外的弹药。
谢谢, 角斗
答案 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个关键字(或无限制,这在现有模型中是不可能的),将很难调整。
使用新模型,您的问题将如何处理:
使用单独的KEYWORD表,您只需提取一个简单的查询,其中单词的出现超过任何阈值(在本例中为100)。
根据上述#1的结果,您只需简单查询所有包含> 100字的文章。
您可以使用子查询(#1)作为单个查询(#2)执行此操作,或者在应用程序中执行此操作,以构建#1的初始数据列表,然后再进行第二次查询#2。
在您调整数据模型之前,使用代码详细回答此问题并不切实可行。