【问题标题】:SQL Keyword Search using multiple optional field filters (Metabase)使用多个可选字段过滤器的 SQL 关键字搜索(元数据库)
【发布时间】:2019-03-03 22:23:38
【问题描述】:

我是 SQL(自学)和 StackOverflow 的新手。因此,如果有一点新词,我深表歉意。

目前我正在尝试在 Metabase 中编写一个查询,允许用户在特定日期期间搜索多个字段,而不是 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 解决方案,但没有任何运气。

这里有人可以帮帮我吗?任何帮助将不胜感激。

【问题讨论】:

    标签: sql filter mariadb field metabase


    【解决方案1】:

    所以我实际上是在经过一些试验和错误之后才弄清楚这一点,并想回来更新线程,以防其他人遇到同样的问题。

    而不是

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

    它需要看起来像

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

    一个小的语法错误,但这让我有点难过。

    无论如何,我感谢人们试图提供的所有帮助,并希望这对未来的人有所帮助。

    【讨论】:

      【解决方案2】:

      您只需要[[AND b.StringA = Like ({{StringA}}+'%']] 即可查找所有以STRING A 开头的值

      或使用 LIKE [[AND b.StringA = Like CONCAT('%'+{{StringA}}+'%')]] 在任何位置查找这些值。 [你的例子]

      另外,我建议在检查可选数据时使用 OR,并且在返回任何内容之前都要求全部为真

      【讨论】:

      • 我无法使用它,因为我试图让用户在不更改 SQL 的情况下输入数据。因此需要使用字段过滤器。使用 LIKE '%STRINGA%' 将只允许输入 SQL 编辑器的内容,并且每次都需要更改。所以我试图让用户输入他们试图在 StringA 下搜索的字符串,然后将该字符串分配给 LIKE 运算符并使用与该字符串相似的数据填充所有行。
      • 关于 OR 的使用:元数据库允许使用 [[AND {{Variable}}]] 作为可选。基本上,如果它们留空,它们将被忽略。
      • 试试这个:[[AND b.StringA = Like CONCAT('%'+{{StringA}}+'%')]]
      • 我确实试过了,我只是在最初的帖子中打错了代码的结尾。不过感谢您的建议。
      猜你喜欢
      • 2022-01-06
      • 2013-06-05
      • 1970-01-01
      • 2021-04-11
      • 1970-01-01
      • 1970-01-01
      • 2021-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多