[英]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并在每次客户获得积分时分配一条新记录。 这是看起来像:
如何编写一个MySql查询,查看oc_customer
中的客户是否不存在于oc_customer_reward
表中,如果他们不存在,那么在该客户的oc_customer_reward
表(价值10点)中创建一条记录?
我不是要求工作代码(除非你真的想提供它)并且我愿意自己做这项工作,但坦率地说我不知道从哪里开始。 方法是什么?
根据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.