2013-07-20 2 views
1

У меня проблема с MySQL, которую я не могу решить. У меня есть mysql для управления установкой виртуального пользователя dovecot, которая использует две таблицы (одну для псевдонимов, другую для доменов).mysql insert со значением, с выбранными данными из другой таблицы

Табличные псевдонимы имеют следующие поля: domain_id (INT), source (VARCHAR), destination (VARCHAR), тогда как домены таблиц имеют только два поля: id (INT AUTO INC) и имя (VARCHAR).

Хотя я могу выбрать псевдонимы, которые принадлежат к данному домену путем выпуска:

SELECT valias.* FROM aliases AS valias 
JOIN domains AS vdomains ON valias.domain_id=vdomains.id 
WHERE vdomains.name = "domain_name"; 

Я не могу работать, чтобы вставить новый псевдоним, задав имя домена. что-то вроде этого:

INSERT INTO valias(domain_id, source, destination) 
    VALUES (id, 'canto', 'george') 
    SELECT id FROM aliases 
    JOIN domains AS vdomains ON aliases.domain_id=vdomains.id 
    WHERE vdomains.name =  "domain_name"; 

Кто-нибудь знает, как решить эту проблему?

+0

Если бы я правильно понял, тогда вы использовали INSERT INTO valias, где «valias» не является таблицей. Поэтому я думаю, вы не можете использовать это. Инструкция Insert должна иметь либо имя_таблицы, либо имя вида. – user2510115

ответ

2

Мой опыт главным образом в MS SQL Server, но я считаю, что это должно идти так же, как в MySQL:

INSERT INTO valias(domain_id, source, destination) 
SELECT id, 'canto', 'george' FROM vdomains 
WHERE name = 'domain_name'; 
+0

Спасибо! работает как шарм. С уважением! – flix

0

Либо я что-то упустил, либо ваш запрос немного переусердствовал. Как об этом:

INSERT INTO aliases(domain_id, source, destination) 
    VALUES (id, 'canto', 'george') 
    JOIN domains ON domains.id = aliases.domain_id 
    WHERE domains.name = 'domain name' 
0

Попробуйте это,

INSERT INTO valias(domain_id, source, destination) 
SELECT id,'canto', 'george' 
FROM aliases 
    JOIN domains AS vdomains 
     ON aliases.domain_id=vdomains.id 
WHERE vdomains.name =  "domain_name"; 
Смежные вопросы