Mysql 从表中选择数据时出现问题?

Mysql 从表中选择数据时出现问题?,mysql,sql,python-2.7,select,group-by,Mysql,Sql,Python 2.7,Select,Group By,我有一张如下所示的桌子 View : Cat : Name abcView abcView abcCategory2 abcView abcCategory2 abcFilter abcView2 abcView2 abcCategory abcView2 abcView3 视图是Cat的父级,Cat是Name的父级。如果Cat存在,视图永远不能为空。同样,如果名称存在,Cat永远不能为空。我希望

我有一张如下所示的桌子

View        :    Cat    :    Name
abcView      
abcView      abcCategory2
abcView      abcCategory2    abcFilter
abcView2      
abcView2     abcCategory
abcView2    
abcView3
视图是Cat的父级,Cat是Name的父级。如果Cat存在,视图永远不能为空。同样,如果名称存在,Cat永远不能为空。我希望以这样一种方式获取数据,即我不希望结果中出现任何空白或复制。如果有两个条目,一个有子条目,一个没有子条目,那么我只想显示包含子条目的条目。但是如果没有子对象,那么我只想返回父对象的名称

试试这个:

SELECT a.View, MAX(a.Cat) Cat, MAX(a.Name) AS `name` 
FROM tableA a 
GROUP BY a.View

尝试以下查询并检查它是否正常工作。它在样本数据中工作,但可能会在表中的数据中产生问题。我正在合并三列,并检查表中不存在相同的组合,因此您将得到一行,最大级别可能为:

DECLARE @TABLE TABLE
(
[View] VARCHAR(100),
Cat VARCHAR(100),
Name VARCHAR(100)
)

INSERT INTO @TABLE VALUES 
('abcView','',''),      
('abcView','abcCategory1',''),
('abcView','abcCategory2',''),
('abcView','abcCategory2','abcFilter'),
('abcView2','',''),
('abcView2','abcCategory',''),
('abcView2','',''),
('abcView3','','')


    SELECT 
    t1.[View],
    t1.Cat,
    t1.Name 
FROM 
    @TABLE AS t1 
WHERE 
    (
        SELECT 
            COUNT(*) 
        FROM 
            @TABLE 
        WHERE 
            ([View]+'-'+Cat+'-'+Name) LIKE '%'+ REPLACE((t1.[View]+'-'+t1.Cat+'-'+t1.Name),'--','-') + '%'
    ) = 1 

您可以选择存在名称的所有条目

SELECT View, Cat, Name
FROM yourTable
WHERE Name NOT NULL
然后将其与所有条目合并,其中只存在一只猫(没有名字)

最后将其与所有条目合并,其中只有一个视图(不存在名称和cat)


当我的每个父母都有一个以上的孩子时,这就不起作用了。每个父母都有多个子。
SELECT View, Cat, Name
FROM yourTable
WHERE Name NOT NULL
SELECT View, Cat, Name
FROM yourTable
WHERE Name IS NOT NULL
UNION
SELECT View, Cat, NULL
FROM yourTable
WHERE Cat IS NOT NULL AND
      Name IS NULL AND
      Cat NOT IN (SELECT Cat FROM yourTable WHERE Name IS NOT NULL)
SELECT View, Cat, Name
FROM yourTable
WHERE Name IS NOT NULL
UNION
SELECT View, Cat, NULL
FROM yourTable
WHERE Cat IS NOT NULL AND
      Name IS NULL AND
      Cat NOT IN (SELECT Cat FROM yourTable WHERE Name IS NOT NULL)
UNION
SELECT View, NULL, NULL
FROM yourTable
WHERE View IS NOT NULL AND
      Cat IS NULL AND
      View NOT IN (SELECT View FROM yourTable WHERE Cat IS NOT NULL)