mySQL查询无法正常工作

时间:2017-09-27 06:01:08

标签: mysql

我的查询出了什么问题:

SELECT
    Articles.Name, 
    GroupOfArticles.Name, 
    (select GroupOfArticles.Name from GroupOfArticles
     where GroupOfArticles.ParentGroup= Articles.Group)
FROM Articles
JOIN GroupOfArticles
    ON Articles.Group = GroupOfArticles.ID

我想显示文章的名称和层次结构中最基本的组的名称......

databasemodel

2 个答案:

答案 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

虽然我非常怀疑你真的想要加入两个列:IDParentGroup

答案 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 替代版本,不包括JOINCASE

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
    )

SQLFiddle

请注意,在最近的两个查询中,您可以将DISTINCT关键字替换为GROUP BY a.Name HAVING COUNT(*) > 0,如果您确实必须使用这些结构。只需从顶部删除DISTINCT,然后在结尾添加GROUP BY ...

相关问题