我的查询出了什么问题:
SELECT
Articles.Name,
GroupOfArticles.Name,
(select GroupOfArticles.Name from GroupOfArticles
where GroupOfArticles.ParentGroup= Articles.Group)
FROM Articles
JOIN GroupOfArticles
ON Articles.Group = GroupOfArticles.ID
我想显示文章的名称和层次结构中最基本的组的名称......
答案 0 :(得分:1)
您需要在实际子查询之外加入子查询,如
SELECT a.Name, g.Name,
FROM Articles a
INNER JOIN (select Name,ParentGroup from GroupOfArticles) g
ON g.ID =a.Group
AND g.ParentGroup=a.group
显示的实际查询甚至可以在没有子查询的情况下完成,例如
SELECT a.Name, g.Name,
FROM Articles a
INNER JOIN GroupOfArticles g
ON g.ID =a.Group
AND g.ParentGroup=a.group
虽然我非常怀疑你真的想要加入两个列:ID
和ParentGroup
?
答案 1 :(得分:0)
显然我没有看过你的架构,但我认为你根本不需要子选择。它似乎会返回与GroupOfArticles.Name
相同的效果吗?
SELECT
Articles.Name,
GroupOfArticles.Name
FROM
Articles JOIN GroupOfArticles
ON Articles.Group = GroupOfArticles.ID
AND GroupOfArticles.ParentGroup = Articles.Group
实际上,上面假设返回的每篇文章都是特定组的一部分,并且还会有一个相同的父组。 Inception?
编辑根据更多要求/信息,这是第二个版本:
SELECT DISTINCT
a.Name,
g.Name
FROM
GroupOfArticles g INNER JOIN GroupOfArticles g1
ON g1.ParentGroup = g.ID
INNER JOIN Articles a ON
CASE
WHEN g.ParentGroup IS NULL THEN g.ID
ELSE g1.ID
END
我还为上面创建了SQLFiddle。
编辑2 替代版本,不包括JOIN
或CASE
:
SELECT DISTINCT
a.Name,
g.Name
FROM
Articles a, GroupOfArticles g, GroupOfArticles g1
WHERE
g.ID <> g1.ID
AND g.ParentGroup IS NULL
AND
(
a.Group = g.ID
OR a.Group = g1.ID AND g1.ParentGroup = g.ID
)
请注意,在最近的两个查询中,您可以将DISTINCT
关键字替换为GROUP BY a.Name HAVING COUNT(*) > 0
,如果您确实必须使用这些结构。只需从顶部删除DISTINCT
,然后在结尾添加GROUP BY ...
。