Помогите написать SQL запрос

Автор sotrud_nik, 31 Марта 2014, 15:40

« предыдущая тема - следующая тема »

0 Пользователей и 2 Гостей просматривают эту тему.

sotrud_nik

Добрый день,

Используется sqlite

Вот такая таблица
sqlite> .schema
CREATE TABLE test(word TEXT,type TEXT);

Вот содержимое
sqlite> .header on
sqlite> select * from test;
word|type
rama|noun
ramada|
car|noun
careta|noun
pila|noun
pilarama|

Что бы я хотел получить:
1) я вытаскиваю список слов у которых тип noun
sqlite> .header off
sqlite> select word from test where type='noun';
rama
car
careta
pila

2) Теперь я хотел бы вытащить строки которые начинаются с каждого из слов выше,
(ну и у которых не проставлен тип) исключая сами слова выше.
Что-то типа такого (не пашет)
sqlite> select word from test where word like (select (word || '%') from test where type='noun');

В данном случае необходимо чтобы вытащило слова
ramada
pilarama

3) JOIN-нить надо?

sotrud_nik

Я так понимаю нужен множественный like или glob

sotrud_nik

Так?

sqlite> select t1.word,group_concat(t2.word) from test t1 join test t2 on t2.word glob (t1.word || '?*') and t2.type='' group by t1.word;
rama|ramadan
pila|pilarama


Вечером проверю на реальных данных.

B@F

Интересно, буду ждать результата.
Поправьте, если я ошибаюсь, буду тока рад.

sotrud_nik

Остановился на таком запросе
1) выбрал все слова начинающиеся на букву а
sqlite> create table s1 as select word, type from mytable where word like 'а%';
2) прогнал запрос
sqlite> select t1.word,group_concat(t2.word) from s1 t1 join s1 t2 on t2.word glob (t1.word || '?*') and t2.type='' and length(t1.word) > 5 group by t1.word;

Отрывок с вывода
абжылан|абжыландай
абзалы|абзалында
абонемент|абонементтелу,абонементтеу
абордаж|абордаждау,абордажды,абордаждық
абордажды|абордаждық
абстракт|абстракті
абыржу|абыржулы
абысын|абысын-ажын,абысынды
авангард|авангардистік,авангардтық
авантюрист|авантюристік
авария|авариясыз
автобөлшек|автобөлшектер
автоген|автогенші
автомат|автоматтану,автоматтау,автоматша
автомодель|автомодельші

Как видим, встречается как слово абордаж так и абордажды

В общем, прикольно.