2013-07-20 127 views
1

我有一個我無法解決的MySQL問題。我有一個mysql來管理虛擬用戶dovecot安裝,它使用兩個表(一個用於別名,另一個用於域)。mysql插入值,從另一個表中選擇的數據

表別名具有以下字段:domain_id(INT),source(VARCHAR),destination(VARCHAR),而表域只有兩個字段:id(INT AUTO INC)和name(VARCHAR)。

雖然我可以通過發行來選擇屬於給定域別名:

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

我不能去上班插入一個新的別名,specifing域名。像這樣:

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」不是任何表。所以我認爲你不能使用它。插入語句必須具有表名或視圖名。 – 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"; 
相關問題