[英]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.