0

我查看了以下答案:Select rows from a table where the row in another table with same id has a specific value in another column

就子查询而言,这让我感到困惑。

我的表如下所示:

Field   Type
------  ------------
id      int(11)
parent  int(11)
title   varchar(255)
uri     varchar(255)
perms   varchar(255)   

我想要做的是选择我所有的记录并显示 parent 和 parent_name(如果 parent 存在。

所以一个示例输出,如果我有两行

foo id 为 1 & bar id 为 2 和 child 为 1

foo null bar foo 1

我的 sql 看起来像这样:

SELECT id,parent,title,uri,perms 
FROM ls_menu_manager
WHERE parent IN (
SELECT title AS parent_name
FROM ls_menu_manager
WHERE parent=id
)

但不按预期工作。我想我已经把自己弄糊涂了,任何帮助都将不胜感激。

4

1 回答 1

1

在我看来,您应该尝试使用 LEFT JOIN

SELECT ch.id, ch.parent, ch.title, ch.uri, ch.perms, pr.title as parent_name
  FROM ls_menu_manager ch
  left join ls_menu_manager pr
    on pr.id = ch.parent

这将显示 ls_menu_manager 中的所有行,以及它们的父名称(如果存在)。
如果没有为特定行定义父级,则 parent_name 将显示为 null。
如果您只想对具有父级的行执行此操作,则通过删除 left 关键字将左连接更改为自然连接。

SELECT ch.id, ch.parent, ch.title, ch.uri, ch.perms, pr.title as parent_name
  FROM ls_menu_manager ch
  join ls_menu_manager pr
    on pr.id = ch.parent
于 2013-07-31T21:17:50.440 回答