MySql - 如果没有记录,则插入多行

时间:2014-05-24 13:52:36

标签: php mysql

在提出这个问题之前,我已经在Google和StockOverflow上搜索了很多条目。没有什么能解决我的问题。

有两个表格 - group_sale_bonusesmembers。我想检查product_id "1"中是否有group_sale_bonuses的记录。

如果没有,我想将members表中的所有记录插入group_sale_bonuses product_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 IgnoreWhere Not Exists的解决方案。

但是这些条件检查是基于每条记录。我在members表中有数千条记录。我想在上面的sql示例中进行一次条件检查。

顺便说一句,我将在Sql网络应用程序中使用此Php

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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子句

将其过滤到特定的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 AND m.product_id = 1;

看看这个SQLfiddle:http://sqlfiddle.com/#!2/8482c/2