Поиск по ключевым словам SQL с использованием нескольких необязательных фильтров полей (метабаза) - PullRequest
0 голосов
/ 28 сентября 2018

Я новичок в SQL (Self Taught) и в StackOverflow.Поэтому я прошу прощения, если есть немного новичка.

В настоящее время я пытаюсь написать запрос в метабазе, который позволяет пользователю искать несколько полей в течение определенного периода времени, не будучи на 100% точным к тому, что онипоиск, похожий на поиск по ключевым словам.

Search requests:
Date Time...(Required)
User...(optional)
String A...(optional)
String B...(optional)
String C...(optional)

SELECT 
a.DateTime,
a.User,
b.StringA,
b.StringB,
b.StringC

FROM TableA a

JOIN tableB b
   ON TableAid = TableBid

WHERE a.datetime between {{start}} and {{end}}
[[AND a.User = {{user}}]]
[[AND b.StringA = {{StringA}}]]
[[AND b.StringB = {{StringB}}]]
[[AND b.StringC = {{StringC}}]];

Синтаксис, приведенный выше, работает правильно, но только если в соответствующие поля введены полные слова.Я пытаюсь использовать оператор Like для извлечения всех строк в столбцах AB и C, которые имеют строку, аналогичную приведенной.

Я пытался использовать

[[AND b.StringA = Like ('%'+{{StringA}}+'%')]]

и

[[AND b.StringA = Like CONCAT('%'+{{StringA}}+'%')]]

безрезультатно и попытался применить несколько решений @StringA в некоторых потоках здесь, но безуспешно.

Кто-нибудь может мне здесь помочь?Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 30 сентября 2018

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

Вместо

[[AND b.StringA = Like CONCAT('%'+{{StringA}}+'%')]]

это должно выглядеть как

[[and b.StringA like (concat('%',{{StringA}},'%'))]]

Небольшая синтаксическая ошибка, но человек, это меня немного озадачило.

В любом случае, я ценю всю помощь, которую пытались оказать люди, и надеюсь, что это поможеткто-то в будущем.

0 голосов
/ 28 сентября 2018

Вам нужно только [[AND b.StringA = Like ({{StringA}}+'%']], чтобы найти все значения, которые начинаются с STRING A

, или использовать LIKE [[AND b.StringA = Like CONCAT('%'+{{StringA}}+'%')]], чтобы найти эти значения в любой позиции.[ваш пример]

также, я бы предложил использовать ИЛИ при проверке дополнительных данных, И требует, чтобы все было верно, прежде чем что-либо возвращать

...