2014-10-20 92 views
0

我想創建一個插入語句,下面是我到目前爲止有:MySQL如何在SELECT子查詢返回多行時插入到表中?

INSERT INTO Role (application, developer, role) 

VALUES (? , 
(SELECT Id from Developer WHERE firstName='Alice' and lastname='Wonderland'), 
'ARCHITECT'); 

在缺失值領域,我試圖做一個連接,下面的連接語句返回我需要的值:

SELECT a.id 
FROM Application a 
JOIN application d ON d.id = a.id and a.category='GAMES' 

然而,當我插入之前的查詢到在INSERT語句中缺少值字段,它給我的錯誤,指出查詢返回超過1行(這是故意的,看到我想要的所有行返回插入到角色表中)

任何人都可以提供有關如何解決此問題的反饋嗎?

+0

您一次只能插入一行,因此您需要找到一種方法逐一完成此操作。 – AdamMc331 2014-10-20 15:09:06

+0

加入你沒有任何意義。您正在加入同一個ID列上的同一張表。你確定這是正確的嗎? – Donal 2014-10-20 15:10:34

+0

@Donal,是的,join語句在值字段外很好地工作。如果您有更好的方式來設置聯合聲明,請告訴我。 – user3220348 2014-10-20 15:12:07

回答

1

我認爲這是你在找什麼:

INSERT INTO Role(application, developer, role) 
    SELECT a.id, (SELECT Id from Developer WHERE firstName = 'Alice' and lastname = 'Wonderland'), 
      'ARCHITECT' 
    FROM Application a JOIN 
     application d 
     ON d.id = a.id and a.category = 'GAMES'; 

注:我要與Developer移動子查詢到FROM條款。但是,如果沒有匹配,這將返回NULL - 這似乎是您的意圖。如果我把它放在FROM條款中,你將得不到任何匹配(MySQL沒有left cross join)。

0

將您其他參數到你的SELECT語句

INSERT INTO Role (application, developer, role) 
SELECT ?, Id, 'ARCHITECT' FROM Application a 
JOIN application d ON d.id = a.id and a.category='GAMES' 
+0

這看起來如何? (SQL語句)我不知道如何創建一個處理每個我需要的元素的插入語句,以及不使用值字段的連接。 – user3220348 2014-10-20 15:15:48

+0

就是這樣。 INSERT INTO和SELECT語句之後,它將插入SELECT返回的所有行 – ChrisStillwell 2014-10-20 15:18:32

0

您需要使用INSERT INTO .. SELECT FROM結構來完成這件事。有模擬了查詢看起來像下面

INSERT INTO Role (application, developer, role)  
select a.id, 
dev.Id, 
'ARCHITECT' 
FROM Application a 
JOIN developer dev on a.Id = dev.Id 
WHERE a.category='GAMES' 
AND dev.firstName='Alice' 
and dev.lastname='Wonderland' 
+0

在這種情況下,我將如何設置「角色」的值?它是一個字符串。此外,開發者的名字和姓氏被用於獲取其開發者ID。 – user3220348 2014-10-20 15:17:57

+0

按照答案。希望有所幫助。 – Rahul 2014-10-20 15:19:40

相關問題