2015-09-16 2 views
3

У меня есть временная таблица в MySQL, как:Как сделать Mysql вставки запроса с несколькими отборного заявлением

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

Теперь у меня есть 3 Нормальных таблиц в моих схемах, которые ParentPermissions, ChildPermissions и OrgPermissions. Каждый из них имеет некоторые значения в нем, которые могут быть одинаковыми во всех этих таблицах, например CanEdit, CanDelete и так далее. Теперь то, что я хочу сделать, это получить разрешения от этих таблиц и вставить в таблицу temp. Я использовал this в качестве примера для создания инструкции insert с несколькими запросами на выбор, но почему-то я получаю повторение. Как говорят мои 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: Я добавил значение по умолчанию как null, поэтому я ожидаю, что он примет значение null, если значение не найдено? – 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

Смежные вопросы