簡體   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