Поиск по ключевому слову SQL с использованием нескольких необязательных фильтров полей (метабаза)
Я новичок в SQL(Self Taught) и в Stackru. Поэтому я прошу прощения, если есть немного новичка.
В настоящее время я пытаюсь написать запрос в метабазе, который позволяет пользователю выполнять поиск по нескольким полям в течение определенного периода времени, не будучи на 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 для извлечения всех строк в столбцах A B и C, которые имеют строку, аналогичную приведенной.
Я пытался с помощью
[[AND b.StringA = Like ('%'+{{StringA}}+'%')]]
а также
[[AND b.StringA = Like CONCAT('%'+{{StringA}}+'%')]]
безрезультатно и попытался использовать несколько решений @StringA в некоторых темах, но безуспешно.
Кто-нибудь может помочь мне здесь? Любая помощь будет принята с благодарностью.
2 ответа
Так что я на самом деле выяснил это после небольшой проб и ошибок и хотел вернуться и обновить ветку на случай, если у кого-то еще возникнет такая же проблема.
Скорее, чем
[[AND b.StringA = Like CONCAT('%'+{{StringA}}+'%')]]
это должно выглядеть
[[and b.StringA like (concat('%',{{StringA}},'%'))]]
Небольшая синтаксическая ошибка, но человек это меня немного озадачил.
В любом случае, я ценю всю помощь, которую пытались оказать люди, и надеюсь, что это поможет кому-то в будущем.
Вам нужно только [[AND b.StringA = Like ({{StringA}}+'%']]
найти все значения, которые начинаются с STRING A
или используйте как [[AND b.StringA = Like CONCAT('%'+{{StringA}}+'%')]]
найти эти значения в любой позиции. [ваш пример]
Кроме того, я бы предложил использовать ИЛИ при проверке дополнительных данных, И требует, чтобы все было верно, прежде чем возвращать что-либо