У меня есть таблица с именем words
, состоящая из трех столбцов word(VARCHAR(16)), doc_id(INT), weight(DOUBLE)
.
Вот что мне нужно сделать, у меня два запроса:
SELECT doc_id, weight FROM words WHERE word = 'bla';
doc_id weight
------ ------
1 0.14
2 0.61
3 0.32
и
SELECT doc_id, weight FROM words WHERE word = 'blabla';
doc_id weight
------ ------
2 0.19
3 0.45
4 0.14
Мне нужно получить пересечение двух на doc_id
и выбрать нижнее значение weight
в качестве веса, т.е. я хочу, чтобы результаты были:
doc_id weight
------ ------
2 0.19
3 0.32
Есть ли способ сделать это в одном запросе? Выполнение этого в программе делает это чертовски медленным!
Мне также нужно получить их UNION
и выбрать более высокое значение weight
, т.е. я хочу, чтобы результаты были:
doc_id weight
------ ------
1 0.14
2 0.61
3 0.45
4 0.14
Имейте в виду, что столбцы word
и doc_id
не являются уникальными, поэтому одному слову можно присвоить множество документов.