【发布时间】:2020-06-27 14:13:04
【问题描述】:
您好,我正在努力创建一个自定义列,以便在不同的表中找到匹配项。
表结构:
表格联系人包含表格列
- 身份证
- 其他一些与我的问题无关的专栏
Table Projects 包含表格列
- 身份证
- 姓名
表格匹配包含表格列
- 身份证
- project_id(等于项目表id)
- contact_id(等于联系表id)
问题
例如,我想检索与项目编号 1 和 2 匹配的联系人。 使用左连接,我将根据与匹配表中的“contact_id”匹配的联系人“id”连接联系人信息。 现在我想向该联系人添加一列,说明该联系人是项目 1 或/和 2 的一部分
所以输出应该是,如果存在联系人,则与项目 ID 为 1 和/或项目 ID 为 2 的表匹配。
表格应如下所示:
联系方式 id,(联系默认列对我的问题不重要)、project1、project2 等
123,(一些默认列),1,0(例如)
我不想要的是,在输出表中,同一个联系人多次出现,只是在 project1 列或 project2 列中设置了不同的值。因此,联系人需要按某种方式分组! 此外,不应限制可以作为列显示的项目数量,因为一个联系人可以连接到 10 个项目。
我想出了这么多。
SELECT contacts.*, (fields project1 and project2, etc. more columns when there are more matches)
FROM contacts
LEFT JOIN matches on contacts.id = matches.contact_id
LEFT JOIN projects ON projects.project_id = matches.project_id
GROUP BY contacts.id
有没有人可以帮助我解决这个问题。因为这一点我不再知道如何解决这个问题,所以我尝试了多种方法都没有给我上述结果。
如果需要创建更多的左连接,那没问题,我可以实现。
新增
所以我设法做到了这一点,但是这个查询只显示了值为 true 的 project1 但 project1 和 project2 在这种情况下应该是 true 但它不是因为它被分组在 contact.id 上,这导致只显示从匹配的表格中找到的第一个记录,在这种情况下是 id 为 1 的联系人与项目 id 为 1 之间的连接。
SELECT contacts.* ,
IF(matches.project_id = 1, true,false ) as project1,
IF(matches.project_id = 2, true,false ) as project2
FROM contacts
LEFT JOIN matches ON matches.contact_id = contacts.id
LEFT JOIN projects ON projects.id = matches.project_id
GROUP BY contacts.id
当我离开该组时,它会显示 2 个正确的结果 第一条记录显示 project1 为 true 第二条记录显示 project2 为 true。 现在我只需要 project1 和 project2 的值在一行 sins 联系人是一样的。
提前致谢。
【问题讨论】:
标签: mysql join select group-by pivot