MySql - 使用另一行

时间:2018-03-23 05:58:20

标签: mysql

我有一个包含很多字段的表joomla_jdownloads_cats_backup。重要字段为:cat_dir_parentparent_idcat_dir_namecat_id

cat_dir_parentcat_dir_namecat_id的值是正确的。 cat_dir_name是目录的名称,cat_dir_parentcat_dir_name的根路径,cat_id是该目录的数据库ID。例如:

cat_dir_parent  cat_dir_name    cat_id  parent_id
MyRootDir       dir1            1       ?
MyRootDir       dir2            2       ?
                MyRootDir       3       ?

应使用 MySql UPDATE 插入parent_id的值,但经过数小时的试用后,我找不到任何方法......

对于每一行,parent_id应该等于cat_id的{​​{1}},cat_dir等于给定行的cat_dir_parent,或0没有任何父母。例如:

cat_dir_parent  cat_dir_name    cat_id  parent_id
MyRootDir       dir1            1       3
MyRootDir       dir2            2       3
                MyRootDir       3       0

MySql代码可以执行此任务吗?

我需要执行以下步骤,我不知道如何操作:

  • 对于每一行,我都会阅读cat_dir_parent
  • 我选择cat_id cat_dir_name等于给定cat_dir_parent
  • parent_id
  • 我将cat_id设置为等于所选的UPDATE joomla_jdownloads_cats_backup t1 INNER JOIN joomla_jdownloads_cats_backup t2 ON t1.cat_dir_parent = t2.cat_dir_name SET t1.parent_id = t2.cat_id

这是我的最后一次试验,没有成功:

pom.xml

1 个答案:

答案 0 :(得分:1)

我能够UPDATE parent_id成功使用与您类似的查询。我刚刚使用LEFT JOINparent_id设置为0,而不是父项,以防它的初始值为NULL。否则,如果您更喜欢使用INNER JOIN,则必须根据您的要求手动将parent_id所述记录设置为0,这也可以。

UPDATE joomla_jdownloads_cats_backup T1
  LEFT JOIN joomla_jdownloads_cats_backup T2 ON T1.cat_dir_parent = T2.cat_dir_name
  SET T1.parent_id = IFNULL(T2.cat_id, 0);

LEFT JOIN SQL Fiddle

INNER JOIN SQL Fiddle