简体   繁体   English

如何在子记录列中显示父记录ID-Mysql

[英]How to show parent record Id in child record column-Mysql

I want to show my parent id with child record(duplicate record). 我想显示带有孩子记录(重复记录)的父母ID。 Here is my table 这是我的桌子

ID|Name |Comments|
__|_____|________|_
1 |Test1|Unique  |
2 |Test2|Unique  |
3 |Test1|Unique  |
4 |Test2|Unique  |
5 |Test1|Unique  |
6 |Test3|Unique  |

Expected Result: 预期结果:

ID|Name |Comments          |
__|_____|__________________|_
1 |Test1|Unique            |
2 |Test2|Unique            |
3 |Test1|Duplicate with: 1 |
4 |Test2|Duplicate with: 2 |
5 |Test1|Duplicate with: 1 |
6 |Test3|Unique            |

not sure what the exact goal here, but here is a single query that get the job done: 不知道这里的确切目标是什么,但这是一个完成任务的查询:

mysql> select ID,tbl.Name,if(no!=ID,concat('Duplicate with: ',no),'Unique') Comments from tbl left join (select ID no,Name from tbl group by Name) T on T.Name=tbl.Name;    
+----+-------+-------------------+
| ID | Name  | Comments          |
+----+-------+-------------------+
|  1 | Test1 | Unique            | 
|  2 | Test2 | Unique            | 
|  3 | Test1 | Duplicate with: 1 | 
|  4 | Test2 | Duplicate with: 2 | 
|  5 | Test1 | Duplicate with: 1 | 
|  6 | Test3 | Unique            | 
+----+-------+-------------------+

Check This Live Demo using 'coalesce' and 'Case when' 使用“ coalesce”和“何时发生”检查此现场演示

Query : 查询:

            select id
                    ,name
                    ,coalesce(      
                    ( select coalesce(case when min(id)>0 then concat('Duplicate with : ',min(id)) else null end,Comments)         
                    from Yourtable t2 where t2.name = t.name and t2.id < t.id group by Comments)        
                    ,Comments) as Comments
            from    Yourtable t
            order by id

Output : 输出:

在此处输入图片说明

hey you can try this query and it is giving expected result. 嘿,您可以尝试此查询,它给出了预期的结果。

select t1.id,t1.`name`,
  CASE  WHEN (select count(`name`) from table_name t2 where t2.`name` = t1.`name` and t2.id <= t1.id ) = 1
           then  'unique'
          else CONCAT('Duplicate with :',(select min(t3.id) from table_name t3 where t3.name = t1.`name`))
        end as 'comments'  
from table_name t1

replace table_name with your table. 用表替换table_name

Hope this works for you. 希望这对您有用。 Ask if any doubt 询问是否有疑问

Using only a single sub-query. 仅使用一个子查询。

select    id
         ,name

         ,coalesce 
          (
            concat
            (
              'Duplicate with: '
              ,(select min(id) from mytable t2 where t2.name = t.name and t2.id < t.id)
            )
            ,'Unique'
          ) as Comments

from      mytable t

order by  id

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM