【问题标题】:SQL Query for Joining 2 tables where one of them has multiple values in one field用于连接 2 个表的 SQL 查询,其中一个表在一个字段中有多个值
【发布时间】:2018-03-19 14:55:51
【问题描述】:

如下表1

User_Option_Experience


user_id | teaching_in 
        |  
111     |   1,2,3
112     |   1,4
113     |   4,2

如下表2

Teaching_in


IdTeaching | name
           |  
1          |   Biology
2          |   Chemistry
3          |   Mathematics

现在我想要输出用户(教师)教授的所有科目名称,因为从表格中可以看出,一个用户可以教授许多科目

例如,我想要 id 为 111 的用户的所有主题

我试过了,但没有成功,因为它只返回一条记录

select teaching_in.name 
  from teaching_in 
  left 
  join users_options_experience 
    on user_options_experience.teaching_in = teaching_in.IdTeachingin 
 where user_options_experience.user_id = 15605

【问题讨论】:

  • 欢迎来到 SO!您能否向我们展示您迄今为止尝试过的查询?请同时向我们展示预期的输出。
  • 无需向我们展示您的尝试。相反,请将精力集中在规范化架构上。
  • 这是一种糟糕的数据存储方式。了解如何构建多对多关系。
  • 我无法更改数据库,因为这是我在这里开始工作时发现的。
  • 天啊,多么丑陋的数据库设计!

标签: mysql sql database laravel


【解决方案1】:

选择 a.user_id, GROUP_CONCAT(b.name ORDER BY b.IdTeaching) 部门名称 FROM User_Option_Experience a INNER JOIN Teaching_in b ON FIND_IN_SET(b.IdTeaching , a.teaching_in) > 0 GROUP BY a.user_id

回答者 enter link description here

【讨论】:

  • 非常感谢,这正是我想要的
【解决方案2】:
SELECT  b.name 
FROM    User_Option_Experience a
        INNER JOIN Teaching_in b
            ON FIND_IN_SET(a.teaching_in , b.IdTeaching )
WHERE a.user_id=111;

使用mysql的FIND_IN_SET函数

希望这会对你有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 2011-09-12
    • 2013-10-16
    • 2014-03-23
    • 1970-01-01
    • 2014-06-15
    • 1970-01-01
    相关资源
    最近更新 更多