繁体   English   中英

在MySQL中,如何根据连接条件进行插入?

[英]In MySQL, how do I do an insert based on a join condition?

谢谢你的期待!

背景

我几乎没有使用LAMP堆栈的经验,但我最近开始使用基于LAMP堆栈的OpenCart的在线商店

商店允许我为客户分配奖励积分,我为每个新客户提供10分仅用于创建账户。

不幸的是,OpenCart管理GUI只允许我手动执行此操作,一次一个用户。

但是,我可以访问一个允许我运行MySql命令的界面,我想用这种方法解决问题。

在OpenCart创建的数据库中,我有一个oc_customer表,其中包含我的所有客户,然后我有一个oc_customer_reward表,它关闭客户ID并在每次客户获得积分时分配一条新记录。 这是看起来像:

oc_customer_reward

如何编写一个MySql查询,查看oc_customer中的客户是否不存在于oc_customer_reward表中,如果他们不存在,那么在该客户的oc_customer_reward表(价值10点)中创建一条记录?

我不是要求工作代码(除非你真的想提供它)并且我愿意自己做这项工作,但坦率地说我不知道​​从哪里开始。 方法是什么?

UPDATE

根据Olaf的建议,我可以使用他建议的查询让所有客户oc_customer_reward表中:

SELECT customer_id
FROM oc_customer
WHERE customer_id NOT 
IN (
SELECT customer_id
FROM oc_customer_reward
)

现在,我只需要迭代该查询的结果(抱歉,我不是数据库人员!)并在oc_customer_reward为每个人插入一行。 有点像C#中的foreach循环。 有什么想法吗?

首先找不到奖励表中的客户:

select customer_id from oc_customer
    where customer_id not in (select customer_id from oc_customer_reward);

然后接受并在奖励表中插入一个条目:

insert into oc_customer_reward (customer_id, points)
    select customer_id, 10 from oc_customer
        where customer_id not in (select customer_id from oc_customer_reward);

这没有经过测试,但我希望它有助于一个开始。

没有测试和不确定oc_customer的表结构,但以下查询应该可以帮助您

INSERT INTO oc_customer_reward ( customer_id, description, points, date_added ) 
 SELECT customer_id, 'reward for registration', 10, CURRENT_TIMESTAMP FROM oc_customer WHERE NOT EXISTS ( SELECT * FROM oc_customer_reward r WHERE r.customer_id = oc_customer.customer_id );

有关EXISTS语句的更多详细信息,请参见此处

http://dev.mysql.com/doc/refman/5.5/en//exists-and-not-exists-subqueries.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM