2014-05-24 34 views
0

在問這個問題之前,我已經在Google和StockOverflow上搜索了很多條目。沒有什麼能完成我的問題。MySql - 如果沒有記錄,則插入多行

有兩個表格 - group_sale_bonusesmembers。我想檢查是否已在group_sale_bonuses中有product_id "1"的記錄。

如果不是,我想從members表中插入所有記錄到group_sale_bonusesproduct_id "1"

我的總體要求是如下:

IF ((Select count(id) from group_sale_bonuses where product_id = 1) = 0) THEN 
    INSERT INTO group_sale_bonuses (member_id, product_id, quantity_counter, credit) 
    SELECT id, 1, 0, 0 FROM members 
END IF 

但這SQL導致錯誤。

我知道有關於Insert Ignore,Where Not Exists的解決方案。

但這些條件檢查是基於每條記錄。我在members表中有上千條記錄。我想在上面的sql例子中進行一次條件檢查。

順便說一下,我將在Php web應用程序中使用此Sql

+0

你正在得到哪個錯誤? –

+0

@ user790454錯誤是 - #1064 - 你的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在'IF((來自group_sale_bonuses where product_id = 1的選擇計數(id))= 0)附近使用正確的語法時使用'THEN'在第1行 –

+0

我認爲您不能使用IF語句直接在查詢中,至少我在谷歌上找不到任何關於此的內容。我認爲你應該用你的web應用程序來做。如果我知道的唯一的陳述是if(condition,thenthis,elsethis) – Artemkller545

回答

0

您可以將代碼設置爲WHERE子句而不是IF

INSERT INTO group_sale_bonuses(
    member_id, 
    product_id, 
    quantity_counter, 
    credit) 
SELECT 
    id, 1, 0, 0 FROM members 
WHERE( 
    SELECT 
     count(id) FROM group_sale_bonuses 
    WHERE product_id = 1 
) = 0; 
0

這應該做到這一切的product_id的

SELECT m.product_id, m.member_id FROM members AS m 
LEFT JOIN group_sale_bonuses AS gsb ON gsb.product_id = m.product_id 
WHERE gsb.product_id IS NULL ; 

您可以通過添加where子句

SELECT m.product_id, m.member_id FROM members AS m 
LEFT JOIN group_sale_bonuses AS gsb ON gsb.product_id = m.product_id 
WHERE gsb.product_id IS NULL AND m.product_id = 1; 

它過濾特定的product_id這SQLfiddle看看:http://sqlfiddle.com/#!2/8482c/2

相關問題