Извлечь несоответствующий контент или значения - PullRequest
0 голосов
/ 22 мая 2019

Я хочу извлечь несопоставленные значения в данных, как в (таблица1)


name    id  subject
maria   01  Math computer english
faro    02  Computer stat english
hina    03  Chemistry physics bio

Приведенный ниже запрос

Select *
from table1
where subject like ‘%english%’ or 
      subject like ‘%stat%’

возвращает первые две строки, которые соответствуют критериям.

Но мне просто нужно извлечь несопоставленные значения из столбца (субъекта), как показано ниже:

unmatched
math computer
computer
chemistry physics bio

(поскольку в первой строке не совпадают только математические компьютерные значения, вво втором ряду два совпадения и в третьем ряду нет совпадений).

могу ли я получить этот вывод ??

Ответы [ 2 ]

1 голос
/ 22 мая 2019

У вас плохой дизайн стола.Вы должны хранить списки как отдельные строки в другой таблице - так называемой таблице «соединения» или «ассоциации».SQL имеет отличный тип данных для хранения списков.Это называется «таблица», а не «строка».

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

Если это так, вы можете использоватьreplace() и trim(), чтобы получить список, который вы хотите.Я бы сделал:

SELECT trim(replace(replace(' ' || subject || ' ', ' english ', ' '
                           ), ' stat ', ''
                   ), '  ', ' '
           ) as unmatched
FROM tablename;

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

1 голос
/ 22 мая 2019

С REPLACE вы исключаете все вхождения значений 'english' и / или 'stat':

SELECT
  trim(
    replace(replace(replace(subject, 'english', ''), 'stat', ''), '  ', '')
  ) unmatched
FROM tablename;

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

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