SQL-запрос на особых условиях - PullRequest
0 голосов
/ 08 марта 2012

Пожалуйста, помогите мне сформировать запрос SQL ... У меня есть таблица в DB2, т.е. SVA1ARTICLE,

ИМЯ ТАБЛИЦЫ:

SVA1ARTICLE

Таблица, имеющая столбец

ID
KEYWORD1
KEYWORD2
KEYWORD3
KEYWORD4

Требование:

  1. Необходимо найти КЛЮЧЕВОЕ СЛОВО, которое, по крайней мере, повторяется 100 раз из всех 4-х КОЛОНН КЛЮЧЕВЫХ СЛОВ, т.е. также УНИКАЛЬНЫХ.напримербюджет является ключевым словом в COL KEYWORD1 и повторяется 100 раз, после чего возвращается бюджет.То же относится и к другим полям KEYWORD.

  2. Из результата, полученного в результате вышеприведенного запроса, нам нужно найти все столбцы из одной таблицы.То есть, если приведенный выше запрос возвращает «бюджет» в качестве ключевого слова, то нам нужно выяснить все записи, имеющие ключевое слово «бюджет», и дать нам первые 50 последних строк.

Пожалуйста, помогите своему воину, который является границей с мечом, только без дополнительных боеприпасов в руках.

Спасибо, Гладиатор

Ответы [ 2 ]

1 голос
/ 08 марта 2012

Я согласен с сообщением 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 

"Узнайте КЛЮЧЕВОЕ СЛОВО, которое, по крайней мере, повторяется 100 раз из всех 4 индивидуальная КЛЮЧЕВЫЕ СЛОВА "

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)

Этот запрос возвращает идентификатор для строк, которые соответствуют вашим критериям. Вы можете самостоятельно выполнить запрос, получив последние 50 строк из исходной таблицы SVA1ARTICLE.

0 голосов
/ 08 марта 2012

По-моему, вы очень сложно моделируете данные.

Было бы проще создать таблицу KEYWORD с ForeignKey из SVA1ARTICLE и ссылочным ограничением на то, что на один и тот же SVA1ARTICLE нельзя ссылаться более 4 раз из таблицы KEYWORD.

Если вы сделаете это, ваша логика запросов станет на намного проще, скорость запроса будет увеличена (создайте индекс для KEYWORD как для сохраненного слова, так и для ссылки на SVA1ARTICLE), и вы не будете складывать множество подзапросов, чтобы получить ваш результат, который будет очень трудно настроить позже, когда спецификация изменится на обработку, скажем, 3 или 5 ключевых слов (или без ограничений, что невозможно в вашей существующей модели).

С новой моделью, как будут решаться ваши проблемы:

  1. С отдельной таблицей KEYWORD вы можете просто получить простой запрос, в котором вхождения слова превышают любой порог (в данном случае 100).

  2. Из приведенного выше результата # 1 вы можете просто извлечь простой запрос для всех статей, содержащих> 100 слов.

Вы можете сделать это как один запрос (# 2) с подзапросом (# 1) или в приложении, как построение начального списка данных из # 1, а затем сделать второй запрос # 2.

Пока вы не скорректируете модель данных, подробный ответ на этот вопрос с помощью кода не очень практичен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...