mysql - mysql 查询中的 LIKE CONCAT 问题

标签 mysql

我有两个表:userstabletop_questionsusers 表有一个名为 institution_primary_function 的列,tabletop_questions 有一个名为 target_institutions 的列。 users.institution_primary_function = C 的示例值和 tabletop_questions.target_institutions = A,B,C,D,E,F 的示例值.

我尝试使用以下查询仅返回 users.institution_primary_function 的值包含在 tabletop_questions.target_institutions(逗号分隔列表)中的那些行。

SELECT * FROM tabletop_questions
LEFT JOIN users
  ON users.institution_primary_function 
  LIKE CONCAT( '%,', tabletop_questions.target_institutions, ',%' ) 

但是,对于此查询,tabletop_questions 表中的每一行都会返回,所有来自连接的users 表的值都为 NULL。你能告诉我哪里出错了吗?

最佳答案

您应该规范化您的数据,因为通过逗号分隔的字符串进行搜索效率不高。然而,MySQL 包含一个函数,称为 FIND_IN_SET()。 .使用 INNER JOIN 而不是 LEFT OUTER JOIN 只返回匹配的记录。

SELECT * FROM tabletop_questions
INNER JOIN users
  ON FIND_IN_SET(users.institution_primary_function,
    tabletop_questions.target_institutions)

关于mysql - mysql 查询中的 LIKE CONCAT 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28590287/

相关文章:

java - Hibernate 或 HQL 选择另一个 SELECT 的结果

mysql - SQL查询以获取表中所有不同项目的最新记录

php - https 站点 php 上的远程 MySQL 连接?

python - 如何从 Django 中删除模型?

PHP MySQL Json_encode 什么都不显示

MySQL 指定的键太长

mysql 查询在存储过程中不起作用

mysql - 正则表达式和 mysql : is there an "AND" operator

mysql - 计时器用 while 语句触发 mysql - 未获取所有数据

PHP mysql_query() 的参数计数错误 - 可能的语法错误