Mysql为每个返回的结果选择IN另一个表行

问题描述 投票:1回答:1

我有两张桌子sectionusers。我需要运行一个简单的查询来返回所有部分。但是对于每个部分,在用户部分中具有多个ID的字段中可能存在对应的id。即ids = 2,6,8,10

以下是按ID及其分配的用户选择特定部分的示例。

Select * from section, users where sectionid = '2' and sectionid IN (`ids`);

这将返回user.ids2内的所有ids

我的问题是我需要选择分配给一个表中每个部分的所有用户吗?

section 
------------------------------------
sectionid,  sectionname,        Description
   2        section2    
   4        section4
   6        section6
   8        section8

User
------------------------------------
userid,    ids(of the section/s),    
  1             4,6
  2             4,8
  3             
  4             4,6,8

期望的结果:显示所有部分,无论是否分配用户,并在一列中显示每个部分的用户ID / s分配,如下所示。

Result
-------------------
Sectionid,  sectionname,   usersassignedtothissection
    2         section2              null (no one assigned to section2)
    4         section4              1,2,4
    6         section6              1
    8         section8              2,4
mysql sql database
1个回答
3
投票

您可以使用以下解决方案,使用FIND_IN_SETJOIN表:

SELECT 
    section.sectionid, 
    section.sectionname, 
    GROUP_CONCAT(user.userid ORDER BY user.userid) AS 'usersassignedtothissection'
FROM section 
    LEFT JOIN user ON FIND_IN_SET(section.sectionid, user.ids)
GROUP BY section.sectionid, section.sectionname

但是:ぁzxswい

注意:建议不要使用列来存储多个值!您可以创建一个映射表,将表http://sqlfiddle.com/#!9/f9b860/5/0映射到表section,如下所示:

user

在这种情况下,您的查询将是以下内容:

CREATE TABLE section_user (
    user_id INT,
    section_id INT
)

但是:ぁzxswい

© www.soinside.com 2019 - 2024. All rights reserved.