mysql 两行合二为一
mysql join with two row into one
我有 2 tables table name is users 和 projects.the table 的结构是:
用户table
id | name | role
1 | samjad | user
2 | saneer | constructor
项目table
id | name | user_id | constructor_id |
1 | school | 1 | 2 |
如何根据项目 table id.
在单行中从两个 table 获取所有详细信息
我想select
projectname username, constroctorname, user_id, constroctor_id
一行
您可以使用 concat() 函数:
SELECT CONCAT(field1, field2, field3);
https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_concat
或CONCAT_WS(分隔符,str1,str2,...)
假设有一个名为 Constructor 的 table,其列名和 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
事实上你在项目table和用户之间有两个关系(一个给用户,一个给constroctor)你可以使用用户加入两次
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
使用联接。您可能需要一个 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
您可以加入用户 table 两次 - 一次作为用户,然后作为构造者。
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"
您将希望通过键加入表格。在这种情况下,如下所示:
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;
我有 2 tables table name is users 和 projects.the table 的结构是:
用户table
id | name | role
1 | samjad | user
2 | saneer | constructor
项目table
id | name | user_id | constructor_id |
1 | school | 1 | 2 |
如何根据项目 table id.
在单行中从两个 table 获取所有详细信息我想select
projectname username, constroctorname, user_id, constroctor_id
一行
您可以使用 concat() 函数:
SELECT CONCAT(field1, field2, field3);
https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_concat
或CONCAT_WS(分隔符,str1,str2,...)
假设有一个名为 Constructor 的 table,其列名和 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
事实上你在项目table和用户之间有两个关系(一个给用户,一个给constroctor)你可以使用用户加入两次
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
使用联接。您可能需要一个 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
您可以加入用户 table 两次 - 一次作为用户,然后作为构造者。
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"
您将希望通过键加入表格。在这种情况下,如下所示:
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;