我有两个表:users
和tabletop_questions
。 users
表格中有一列名为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
。你能告诉我哪里出错了吗?
答案 0 :(得分:1)
您应该规范化数据,因为搜索逗号分隔的字符串效率不高。然而,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)