MySQL 通过 FIND_IN_SET 使用定界符进行多次连接
MySQL Multiple Join with delimiting via FINDINSET
我正在尝试从第二个和第三个 table 中的列连接到下面第一个 table 中的两个不同列。
我希望加入 users.id 到 job_listings.id 到 return users.username,并加入并分隔 job_listings.categories 到 job_categories.id 到return job_categories.description 通过 FIND_IN_SET
job_listings
id | employer_id | categories
1 | 1 | 1,2
2 | 1 | 2
users
id | username | type
1 | foo | employer
2 | wat | employer
job_categories
id | description
1 | fun
2 | hak
我想要以下格式的输出:
output
username | type | category | description
foo | employer | 1 | fun
foo | employer | 2 | hak
foo | employer | 2 | hak
我尝试使用以下代码的各种排列:
SELECT users.username, users.type, job_listings.categories FROM users
JOIN job_listings ON users.id
JOIN job_listings AS category ON FIND_IN_SET(category.categories, job_categories.id)
ORDER BY users.username, category.categories
我从其他答案中得知,我需要使用别名才能使用具有相同 table 的多个 JOIN 操作,但尽管采用了其他答案,但我仍然收到与声明别名相关的错误,或者 returning 输出包含一个带有别名但没有数据的列 return 在该列中编辑。
首先,你应该规范你的设计。您不应将整数值存储在字符串中。你不应该有你不能这样声明的外键引用。您不应将列表存储在字符串中。这是足够的理由吗?您想要 JobCategories
的联结点 table,每个作业一行,每个类别一行。
有时,我们会被其他人糟糕的决定所困,无法轻易改变。在这种情况下,您需要这样的查询:
SELECT u.username, u.type, jc.id, jc.category
FROM users u JOIN
job_listings jl
ON u.id = jl.employer_id and u.type = 'employer' join
job_categories jc
ON FIND_IN_SET(jc.id, j.categories) > 0
ORDER BY u.username, jc.category;
此查询无法利用类别连接的索引。这意味着它会很慢。正确的数据结构——连接点 table——将解决这个性能问题。
我正在尝试从第二个和第三个 table 中的列连接到下面第一个 table 中的两个不同列。
我希望加入 users.id 到 job_listings.id 到 return users.username,并加入并分隔 job_listings.categories 到 job_categories.id 到return job_categories.description 通过 FIND_IN_SET
job_listings
id | employer_id | categories
1 | 1 | 1,2
2 | 1 | 2
users
id | username | type
1 | foo | employer
2 | wat | employer
job_categories
id | description
1 | fun
2 | hak
我想要以下格式的输出:
output
username | type | category | description
foo | employer | 1 | fun
foo | employer | 2 | hak
foo | employer | 2 | hak
我尝试使用以下代码的各种排列:
SELECT users.username, users.type, job_listings.categories FROM users
JOIN job_listings ON users.id
JOIN job_listings AS category ON FIND_IN_SET(category.categories, job_categories.id)
ORDER BY users.username, category.categories
我从其他答案中得知,我需要使用别名才能使用具有相同 table 的多个 JOIN 操作,但尽管采用了其他答案,但我仍然收到与声明别名相关的错误,或者 returning 输出包含一个带有别名但没有数据的列 return 在该列中编辑。
首先,你应该规范你的设计。您不应将整数值存储在字符串中。你不应该有你不能这样声明的外键引用。您不应将列表存储在字符串中。这是足够的理由吗?您想要 JobCategories
的联结点 table,每个作业一行,每个类别一行。
有时,我们会被其他人糟糕的决定所困,无法轻易改变。在这种情况下,您需要这样的查询:
SELECT u.username, u.type, jc.id, jc.category
FROM users u JOIN
job_listings jl
ON u.id = jl.employer_id and u.type = 'employer' join
job_categories jc
ON FIND_IN_SET(jc.id, j.categories) > 0
ORDER BY u.username, jc.category;
此查询无法利用类别连接的索引。这意味着它会很慢。正确的数据结构——连接点 table——将解决这个性能问题。