【问题标题】:Get a table row if it matches another table row string如果它与另一个表行字符串匹配,则获取一个表行
【发布时间】:2019-09-11 06:58:50
【问题描述】:

我正在尝试从一个表中获取一行,该行与另一个表中的行匹配,而在单个查询中没有存储过程。这可能吗?让我以图形方式解释。假设我有两张桌子

  • tbl_paragraph
  • tbl_keywords

我正在尝试获取与所有关键字行匹配的所有段落行。

tbl_paragraph

tbl_keyword

在这里,我将尝试获取与关键字表关键字列匹配的段落。所以结果会如下所示

虽然我试过一个sql

SELECT a.* 
FROM tbl_paragraph AS a 
INNER JOIN tbl_keywords b ON a.title LIKE '%b.keyword%'

但它不起作用。

【问题讨论】:

  • 使用a.title LIKE CONCAT('%', b.keyword, '%')
  • MySQL like another field的可能重复
  • @MadhurBhaiya 我已经看过那个帖子并尝试过....

标签: mysql sql


【解决方案1】:

我实际上建议使用REGEXP,而不是在这里使用LIKE,默认情况下不区分大小写:

SELECT a.*
FROM tbl_paragraph a
WHERE EXISTS (SELECT 1 FROM tbl_keywords b
              WHERE a.title REGEXP CONCAT('[[:<:]]', b.keyword, '[[:>:]]'));

使用REGEXP 而不是LIKE 的另一个优点,除了区分大小写的问题,是前者允许我们使用单词边界。正如我写的上面的查询,它只会匹配一个关键字we 作为一个独立的词。也就是说,它不会匹配weedwe。这相当于在常规正则表达式中搜索\bwe\b

【讨论】:

    猜你喜欢
    • 2019-03-18
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多