MySQL CONCAT 的语法取决于相同的 table 列?
MySQL syntax for CONCAT depending same table column?
这是我的 table :
pkey
Name
Report_to
11
abc
12
12
def
13
13
sdf
11
14
dfg
我想要这样的输出:
Name
Report_to
abc
def
def
sdf
sdf
abc
dfg
我已经试过了:
SELECT CONCAT( CASE WHEN `Report_TO` = `PKEY` THEN Name ELSE CONCAT( "no one " ) END )
现在我得到输出:
Name
Report_to
abc
no one
def
no one
sdf
no one
dfg
no one
是否可以得到我想要的输出
只需将 table 连接到自身并使用左连接到 select 所需的列:
select tbl1.name , tbl2.name from docs tbl1
left join docs tbl2 on tbl1.report_to = tbl2.pkey
注意:将 table_name 替换为您 table 的真实姓名:
table_name
--> your tables name
sql fiddle here
您可以加入相同table的多个副本,但为了在您的查询中区分每个这样的副本,所有(但最多一个)必须被赋予一些其他的,唯一的,别名,通过它在查询中被知道。
因为您仍然希望在输出中包含 dfg
,即使没有人向其报告,您需要一个 外部连接。外连接有左连接和右连接两种类型,表示即使连接谓词不匹配,仍应包括连接记录的哪一侧。
因此,您可以使用 (sqlfiddle):
SELECT reporter.Name AS Reporter, reportee.Name AS Reportee
FROM my_table AS reporter
LEFT JOIN my_table AS reportee
ON reportee.pkey = reporter.Report_to
ORDER BY reporter.pkey
或(sqlfiddle)
SELECT reporter.Name AS Reporter, reportee.Name AS Reportee
FROM my_table AS reportee
RIGHT JOIN my_table AS reporter
ON reportee.pkey = reporter.Report_to
ORDER BY reporter.pkey
Jeff Atwood(Stack Overflow 的联合创始人)写了一篇很棒的博客 post 您可能会感兴趣,A Visual Explanation of SQL Joins。
这是我的 table :
pkey | Name | Report_to |
---|---|---|
11 | abc | 12 |
12 | def | 13 |
13 | sdf | 11 |
14 | dfg |
我想要这样的输出:
Name | Report_to |
---|---|
abc | def |
def | sdf |
sdf | abc |
dfg |
我已经试过了:
SELECT CONCAT( CASE WHEN `Report_TO` = `PKEY` THEN Name ELSE CONCAT( "no one " ) END )
现在我得到输出:
Name | Report_to |
---|---|
abc | no one |
def | no one |
sdf | no one |
dfg | no one |
是否可以得到我想要的输出
只需将 table 连接到自身并使用左连接到 select 所需的列:
select tbl1.name , tbl2.name from docs tbl1
left join docs tbl2 on tbl1.report_to = tbl2.pkey
注意:将 table_name 替换为您 table 的真实姓名:
table_name
--> your tables name
sql fiddle here
您可以加入相同table的多个副本,但为了在您的查询中区分每个这样的副本,所有(但最多一个)必须被赋予一些其他的,唯一的,别名,通过它在查询中被知道。
因为您仍然希望在输出中包含 dfg
,即使没有人向其报告,您需要一个 外部连接。外连接有左连接和右连接两种类型,表示即使连接谓词不匹配,仍应包括连接记录的哪一侧。
因此,您可以使用 (sqlfiddle):
SELECT reporter.Name AS Reporter, reportee.Name AS Reportee
FROM my_table AS reporter
LEFT JOIN my_table AS reportee
ON reportee.pkey = reporter.Report_to
ORDER BY reporter.pkey
或(sqlfiddle)
SELECT reporter.Name AS Reporter, reportee.Name AS Reportee
FROM my_table AS reportee
RIGHT JOIN my_table AS reporter
ON reportee.pkey = reporter.Report_to
ORDER BY reporter.pkey
Jeff Atwood(Stack Overflow 的联合创始人)写了一篇很棒的博客 post 您可能会感兴趣,A Visual Explanation of SQL Joins。