【问题标题】:mysql join with two row into onemysql join 两行合二为一
【发布时间】:2017-08-13 09:47:13
【问题描述】:

我有 2 个表,表名是 users 和 projects。表的结构是:

用户表

id | name   | role  
1  | samjad | user  
2  | saneer | constructor

项目表

id | name   | user_id | constructor_id |  
1  | school | 1       | 2              |  

如何根据项目表 ID 从单行中的两个表中获取所有详细信息。

我要选择

projectname username, constroctorname, user_id, constroctor_id 

单行

【问题讨论】:

  • 感谢胡安编辑我的问题
  • 谢谢大家解决了

标签: mysql sql subquery inner-join jointable


【解决方案1】:

你可以使用 concat() 函数:

SELECT CONCAT(field1, field2, field3);

https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_concat

或 CONCAT_WS(分隔符,str1,str2,...)

【讨论】:

  • 不客气。如果此解决方案对您有用,请投票并接受我的解决方案。问候
【解决方案2】:

假设有一个名为 Constructor 的表,其中包含列 name 和 constructor_id,您的查询将是

select
  p.name as projectname,
  u.name as username,
  c.name as constructorname,
  u.id as userid,
  c.id as constructorid
from 
projects p 
inner join user u on p.user_id=u.id
inner join constructor c on p.constructor_id=c.id

【讨论】:

  • 实际上看起来user表有用户和构造函数。
【解决方案3】:

您是否在项目表和用户之间有两种关系(一种用于用户,一种用于构造器)您可以使用用户加入两次

  select p.name, u1.username, u2.username, p.user_id, p.constroctor_id
  from projects as p
  inner join user as u1 on p.user_id = u1.id
  inner join user as u2 on p.constroctor_id = u2.id

【讨论】:

    【解决方案4】:

    使用连接。你可能想要一个 INNER JOIN:

    SELECT * -- actually include only the fields you need
    FROM Projects p
    INNER JOIN Users u ON u.id = p.user_id
    INNER JOIN Users uc ON uc.id = p.constructor_id
    

    【讨论】:

      【解决方案5】:

      您可以加入用户表两次 - 一次作为用户,然后作为构造函数。

      select p.name as projectname,
          u.name as username,
          c.name as contructorname,
          p.user_id,
          p.contructor_id
      from projects p
      left join user u on p.user_id = u.id
      left join user c on p.contructor_id = c.id
      where u.role = 'user'           -- check if the said user has role "user"
          and c.role = 'constructor'; -- check if the said constructor has role "constructor"
      

      【讨论】:

      • 你不需要查角色,id已经告诉你他有什么角色。除非他们有重复的 id
      • @Juan - 完全正确。可以验证上述构造函数是否是构造函数
      • 然后您可以将其作为评论部分留在查询中;)
      【解决方案6】:

      您会希望在他们的键上加入表格。在这种情况下,如下所示:

      select p.name as projectname
           , u.name as username
           , if(u.role='constructor',u.name,null) as constructorname
           , p.user_id, p.constructor_id
        from users u
        join projects p
          on p.user_id = u.id;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-25
        • 2012-06-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多