UNION创建视图时出错

时间:2014-05-24 04:14:32

标签: sql oracle

我在创建视图时遇到问题。说:表达式必须是相同的数据类型。这发生在名称。

  CREATE VIEW V_DETAILS_BY_CATEGORY AS 

    SELECT category_id, name
        FROM category 

    UNION ALL 

    SELECT DISTINCT(category_id), COUNT(film_id)
        FROM film_category
        GROUP BY category_id;

编辑:

我的确切问题是我想使用category_id加入两个选择Statment中的结果。

3 个答案:

答案 0 :(得分:3)

count(film_id)是一个数字,而name(可能)是某种字符串。您可能想要进行JOIN,而不是union(union从两个不同的表中获取具有相同结构的行)。此外,不需要使用distinct,因为您正在执行分组。

你可能想要像

这样的东西
SELECT category_id, category_name, COUNT(film_id)
FROM film_category JOIN category USING category_id
GROUP BY category_id, category_name;

答案 1 :(得分:2)

联盟必须包含相同类型的数据。

如果您将计数转换为任何数据类型" name"领域是,它可能会奏效。

SELECT category_id, name FROM category 
UNION ALL 
SELECT category_id, TO_CHAR(COUNT(film_id)) FROM film_category
GROUP BY category_id;

但是,我同意okaram,你实际上可能正在寻找一个JOIN,而不是UNION ALL,这就是我询问目的的原因。

答案 2 :(得分:0)

为联盟中的列使用相同类型的数据

CREATE VIEW V_DETAILS_BY_CATEGORY AS 
        SELECT category_id, name
            FROM category 

        UNION ALL 

        SELECT category_id, CAST(COUNT(film_id) AS NVARCHAR(100))
            FROM film_category
            GROUP BY category_id;

    -------------- OR      
        SELECT category_id, name
            FROM category 

        UNION ALL 

        SELECT category_id, LTRIM(RTRIM(STR(COUNT(film_id))))
            FROM film_category
            GROUP BY category_id;