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