2016-11-22 110 views
1

请参阅下面的图片:创建使用多个选择一个新表

enter image description here

鉴于original表,我需要在MySQL中创建服务器上的derived表。

随着CREATE TABLE ... AS SELECT DISTINCT...我能够创建derived表与Category列,但妄图建立Category_count列。你能指出如何解决这个问题吗?

甚至不太熟悉MySQL或SQL,因此请求。

非常感谢提前!

+0

我建议你使用视图,如果你将要更新相同的表导出,视图就像是一个“虚拟表“做这样的事情: 创建视图派生的选择类别,COUNT(*)AS Category_count由原来 然后,当你做一个‘SELECT *源自’它会显示原始表的值,与视图选择 –

+0

@RicardoOrtegaMagaña,谢谢!尽管如此,我**需要**'衍生出来'作为_table_。 –

回答

1

使用以下如果表不存在

CREATE TABLE derived AS 
SELECT Category, COUNT(*) AS Category_count 
FROM original 
GROUP BY Category 

使用以下如果表已经存在,并不会产生重复行:

INSERT INTO derived (Category, Category_count) 
SELECT Category, COUNT(*) AS Category_count 
FROM original o 
WHERE NOT EXISTS (SELECT * FROM derived d WHERE d.Category = o.Category) 
GROUP BY Category 

使用以下方法来更新已存在的行

UPDATE derived LEFT JOIN (
    SELECT Category, COUNT(*) AS Category_count 
    FROM original 
    GROUP BY Category 
)x ON derived.Category = x.Category 
SET derived.Category_count = x.Category_count 
+0

嗨塞巴斯蒂安布罗什,谢谢! “CREATE TABLE”的工作完美无瑕。但是在创建'derived'并运行'INSERT INTO'后,现有的列会重复。任何修补程序? –

+0

重复列是不可能的,但重复行是可能的。请参阅更新 –

+0

糟糕,我的意思是重复的**行**,而不是_columns_,对于混淆抱歉。 'UPDATE'也可以,谢谢! –

0

选择catoregy,计数(ID)为category_count成从原始组由catoregy

+0

嗨Prasanna Kumar,感谢您的支持。Sebastian Brosch的回答为我点击。 –