MySQL查询的麻烦

时间:2013-05-18 14:58:59

标签: mysql

我目前正在开发一个数字移动忠诚度应用程序,我在查询mysql代码时遇到了问题......

我有4张桌子:Customer, Card, Redemption, Merchant

目前我要做的是,我希望我的系统首先检查客户在兑换时是否拥有某个商家的会员卡

  • 如果是,那么他们可以继续
  • 如果不是,系统将为他们创建一张卡并继续

兑换代码将由商家生成...

问题是如何查询我的代码呢?

Customer

 - Customer_ID
 - C_Email
 - C_Password
 - C_Name

Card

 - Card_ID
 - Chop_Amt
 - Customer_ID*
 - Merchant_ID*

Merchant

 - Merchant_ID
 - Merchant_Name

Redemption

 - Red_ID
 - Red_Code
 - Card_ID*
 - Merchant_ID*

我刚试过自己编写代码...可以帮我查一下吗?

select * 
from customer customer 
join card card 
  on customer.customer_id = card.customer_id 
join redemption redemption 
  on card.merchant_id = redemption.merchant_id 
where card.merchant_id = redemption.merchant_id and
      redemption.red_code = 'A002'

1 个答案:

答案 0 :(得分:1)

我建议在卡表上为商家/客户条目添加唯一索引。如果你采用这种方法,你可以执行INSERT INTO ... ON DUPLICATE KEY UPDATE id = id。这将确保记录存在,无论如何。

要创建索引,请执行此操作

CREATE UNIQUE INDEX customer_merchant ON Card (Customer_ID, Merchant_ID);

现在您已经准备好了,继续进行插入,如果已经存在,则不会插入新行

INSERT INTO Card (Chop_Amt, Customer_ID, Merchant_ID) VALUES(0.00, 1, 1) ON DUPLICATE KEY UPDATE Card_ID = Card_ID

UPDATE Card_ID = Card_ID部分只是“不做任何事情”的别名,因为它将Card_ID设置为自身