如何从逗号拼接的数据库字符串中选择 - SQL

Posted

技术标签:

【中文标题】如何从逗号拼接的数据库字符串中选择 - SQL【英文标题】:How to SELECT from a comma spliced database string - SQL 【发布时间】:2020-05-02 10:30:10 【问题描述】:
            String name = null;
            String keyword2 = null;
            String author = "John";
            PreparedStatement stmt3 = DBM.conn.prepareStatement("SELECT * FROM `timelines` LEFT JOIN `users` ON users.UserID = timelines.TimelineOwner WHERE " +
                    " `TimelineName` = COALESCE(NULLIF(?, ''), `TimelineName`) AND `Keywords` = COALESCE(NULLIF(?, ''), `Keywords`) and `UserName` = COALESCE(NULLIF(?, ''), `UserName`);") ;
            stmt3.setString(1, name);
            stmt3.setString(2, keyword2);
            stmt3.setString(3, author);
            List<Timeline> list = DBM.getFromDB(stmt3, new Timeline());

上面是我对 mysql 数据库的搜索查询,一切都很好,除了我想添加一个附加项,但我不知道如何编码。

问题是关键字存储在数据库中的逗号拼接字符串中,当我将关键字参数更改为“罗马”时,它应该返回该时间轴,但它不会因为数据库字符串是罗马,凯撒, Sun ......我怎样才能添加到查询中,以便在关键字列中 - 它应该单独将参数与单词进行比较?

更新:也许我可以使用 FIND_IN_SET() 并且如果从中返回大于 0 则返回匹配?

【问题讨论】:

说明你要比较的字符串 您是否考虑过使用存储过程来运行它而不是在前端运行它? 有什么理由使用逗号分隔的字符串而不是 1:N 关系? 【参考方案1】:

您可以使用 SQL LIKE 运算符在逗号分隔的字符串中搜索特定关键字:

SELECT * FROM 'timelimes' WHERE 'keywords' LIKE %Rome%

【讨论】:

【参考方案2】:

你可以像这样使用FIND_IN_SET()

SELECT * 
FROM `timelines` 
LEFT JOIN `users` ON users.UserID = timelines.TimelineOwner 
WHERE `TimelineName` = COALESCE(NULLIF(?, ''), `TimelineName`) 
  AND FIND_IN_SET(COALESCE(NULLIF(?, ''), SUBSTRING_INDEX(`Keywords`, ',', 1), `Keywords`)
  AND `UserName` = COALESCE(NULLIF(?, ''), `UserName`);

或与运营商LIKE

SELECT * 
FROM `timelines` 
LEFT JOIN `users` ON users.UserID = timelines.TimelineOwner 
WHERE `TimelineName` = COALESCE(NULLIF(?, ''), `TimelineName`) 
  AND CONCAT(',', `Keywords`, ',') LIKE CONCAT('%,', COALESCE(?, '%'), ',%')  
  AND `UserName` = COALESCE(NULLIF(?, ''), `UserName`);

【讨论】:

以上是关于如何从逗号拼接的数据库字符串中选择 - SQL的主要内容,如果未能解决你的问题,请参考以下文章

如何用sql语句将一列多行数据拼接逗号隔开形成一条记录

sql 如何将查出来的一列用逗号拼接

sql 如何以逗号为分隔符分割一个字段的值

mysql-sql数据拼接

SQL 查询的时候截取字段在逗号前的部分

Mysql 数据字段值是用逗号隔开,如何写SQL语句