2015-09-09 5 views
0

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

|IdWord | Word | One | Two | Three | Four | 
|-----------------------------------------------------| 
| 1 | Alex | I Alex | You Alex | He Alex |She Alex| 

Конечно, этот пример является концепция, пытаясь упростить вопрос.

Я пытаюсь найти Alex в базе данных таким образом, что получаю отдельную запись результата для каждого поля. Результат должен быть таким:

|IdWord | Word | One | Two | Three | Four | 
|-----------------------------------------------------| 
| 1 | Alex | I Alex | null | null | null | 
| 1 | Alex | null | You Alex | null | null | 
| 1 | Alex | null | null | He Alex | null | 
| 1 | Alex | null | null | null |She Alex| 

Я пробовал этот запрос, поскольку он как-то работал раньше в почти одинаковых ситуациях.

SELECT mw.IdWord, mw.IdType, mw.Word, qw.One, iw.Two, sw.Three, pw.Four 
FROM tblWord AS mw LEFT OUTER JOIN 
     tblWord AS qw ON mw.IdWord = qw.IdWord LEFT OUTER JOIN 
     tblWord AS iw ON mw.IdWord = iw.IdWord LEFT OUTER JOIN 
     tblWord AS sw ON mw.IdWord = sw.IdWord LEFT OUTER JOIN 
     tblWord AS pw ON mw.IdWord = pw.IdWord 
WHERE (qw.One LIKE '%Alex%') OR 
     (iw.Two LIKE '%Alex%') OR 
     (sw.Three LIKE '%Alex%') OR 
     (pw.Four LIKE '%Alex%') 

Но в этом случае, он просто показывает результаты, как это:

|IdWord | Word | One | Two | Three | Four | 
|-----------------------------------------------------| 
| 1 | Alex | I Alex | You Alex | He Alex |She Alex| 

есть в любом случае, чтобы получить результат, как я ищу?

+0

Не уверен Я понимаю ... Можете ли вы привести пример ввода/вывода? Почему бы не просто «SELECT IdWord, IdType, Word, One, Two, Three, Four FROM tblWord WHERE One LIKE«% ALEX% »ИЛИ ДРУГИЕ LIKE«% ALEX% »ИЛИ ТРЕТЬЯ ЛИНИЯ«% ALEX% »ИЛИ ЧЕРЕЗ LIKE '% ALEX % ';'? EDIT: Ах, это один ряд Алекс, и вы хотите, чтобы выход один раз за матч в один, два, три или четыре? – Luke

+0

@ Luke Да. Я хочу, чтобы одна строка Alex появилась 4 раза –

+1

Будет ли (SELECT и т. Д. Из tblWord WHERE One LIKE '% ALEX%') UNION ALL (SELECT и т. Д. ГДЕ ДРУГИЕ ЛЮБИМЫЕ и т. Д.) UNION ALL и т. Д.? – Luke

ответ

1

Вы можете использовать союзы, как это:

select idword, word, one, null as two, null as three, null as four 
from table1 
where one like '%Alex%' 
UNION 
select idword, word, null as one, two, null as three, null as four 
from table1 
where two like '%Alex%' 
UNION 
select idword, word, null as one, null as two, three, null as four 
from table1 
where three like '%Alex%' 
UNION 
select idword, word, null as one, null as two, null as three, four 
from table1 
where four like '%Alex%' 

http://sqlfiddle.com/#!7/d03be/4

+0

Спасибо! он работает в 'SQLite' (но не в' SqlCe') –

0

Не слишком увлечен SQLite, но этот код производит вывод, который вы желаете:

with cte as (
    SELECT IdWord, Word, One, null as Two, null as Three, null as Four FROM tblWord WHERE One LIKE '%ALEX%' 
    union 
    SELECT IdWord, Word, null as One, Two, null as Three, null as Four FROM tblWord WHERE One LIKE '%ALEX%' 
    union 
    SELECT IdWord, Word, null as One, null as Two, Three, null as Four FROM tblWord WHERE One LIKE '%ALEX%' 
    union 
    SELECT IdWord, Word, null as One, null as Two, null as Three, Four FROM tblWord WHERE One LIKE '%ALEX%'), 
    cte2 as (
    select IdWord, Word, One, Two, Three, Four, ROW_NUMBER() 
    OVER (PARTITION BY IdWord order by (select 0)) as RowNumber 
    from cte 
    ) 
    select IdWord, Word, One, Two, Three, Four from cte2 order by RowNumber desc 

Результаты:

IdWord Word One Two Three Four 
1 Alex I Alex NULL NULL NULL 
1 Alex NULL You Alex NULL NULL 
1 Alex NULL NULL She Alex NULL 
1 Alex NULL NULL NULL He Alex 
Смежные вопросы