2015-09-16 97 views
3

我有一個臨時表在MySQL爲:怎麼辦Mysql的插入查詢與多個SELECT語句

CREATE TEMPORARY TABLE RolesAndPermissions(
ParentPermissions VARCHAR(255) DEFAULT NULL, 
ChildPermissions VARCHAR(255) DEFAULT NULL, 
OrgPermissions VARCHAR(255) DEFAULT NULL); 

現在,我有我的模式3代普通表這是ParentPermissionsChildPermissionsOrgPermissions。其中每一個都有一些值,在所有這些表中可能都是相同的,如CanEdit,CanDelete等等。現在我想要做的就是從這些表中獲取權限並插入臨時表中。我用this作爲一個例子來建立一個插入語句與多個選擇查詢,但不知何故我得到重複。好比說我3所選擇查詢的是:

SELECT Perm_Name FROM ParentPermissions -> Returns 19 rows 
SELECT Perm_Name FROM ChildPermissions -> Returns 19 rows 
SELECT Perm_Name FROM OrgPermissions -> Returns 57 rows 

我想要的結果集是完全一樣的,但上面即時得到在臨時表19*19*57=20577行。這裏是我的查詢看起來是這樣的:

INSERT INTO 
    RolesAndPermissions (ParentPermissions,ChildPermissions,OrgPermissions) 
SELECT 
    f1.Perm_Name, f2.Perm_Name, f3.Perm_Name 
FROM 
    (SELECT Perm_Name FROM ParentPermissions)AS f1 
CROSS JOIN 
    (SELECT Perm_Name FROM ChildPermissions)AS f2 
CROSS JOIN 
    (SELECT Perm_Name FROM OrgPermissions)AS f3 

請諮詢

+0

你打算如何處理的事實,3個的結果集是不同大小的? –

+0

@TimBiegeleisen:我將默認值添加爲空,所以我期待如果沒有找到任何值,它將會爲空? – user9517536248

+0

如果三個表中的'Perm_Name'值沒有任何共同之處,那麼您無法輕鬆地將它們連接在一起,因爲沒有關係。 –

回答

-1

這是因爲CROSS JOIN的。

嘗試使用提到的帖子中的第二個答案。

我的意思是這樣的:

INSERT INTO MyTable (Col1,Col2,Col3) VALUES 
(
SELECT Col1 FROM (SELECT Col1 FROM table1), 

SELECT Col2 FROM (SELECT Col2 FROM table2), 

SELECT Col3 FROM (SELECT Col3 FROM table3) 
) 
+0

嗯,我不認爲我們可以同時具有兩個值和選擇關鍵字。它在第一次選擇時拋出錯誤 – user9517536248

+0

它不接受選擇查詢之間的逗號 – user9517536248