Linux Forum Казахстан

Общий => Вопрос новичка => Тема начата: sotrud_nik от 31 Марта 2014, 15:40

Название: Помогите написать SQL запрос
Отправлено: sotrud_nik от 31 Марта 2014, 15:40
Добрый день,

Используется 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-нить надо?
Название: Re: Помогите написать SQL запрос
Отправлено: sotrud_nik от 31 Марта 2014, 15:54
Я так понимаю нужен множественный like или glob
Название: Re: Помогите написать SQL запрос
Отправлено: sotrud_nik от 31 Марта 2014, 16:03
Так?

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


Вечером проверю на реальных данных.
Название: Re: Помогите написать SQL запрос
Отправлено: B@F от 31 Марта 2014, 17:04
Интересно, буду ждать результата.
Название: Re: Помогите написать SQL запрос
Отправлено: sotrud_nik от 31 Марта 2014, 19:25
Остановился на таком запросе
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;

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

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

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