我有两个表格,客户和电子邮件都是通过网页填写的。该join语句将email_id上的customer_id连接起来,而select语句将email_id上的customer_id连接起来(每个表上都有更多,但这些是我关注的行)。以某种方式提交了一封额外的电子邮件,因此当SELECT查询触发每个人的电子邮件时,它都会被上移一个人。我需要在电子邮件表中添加适当的外键约束,但是由于数据已经关闭,所以我不确定如何解决它。
示例:
customer_name customer_id email email_id
------------------------- ---------------
s 1 s 1
t 2 t 2
u 3 t 3
v 4 u 4
w 5 v 5
答案 0 :(得分:0)
因此,在您当前的情况下,客户只能收到一封电子邮件。每个人的电子邮件都向上移动一个人是没有意义的。这意味着您根本没有外键关系。看来这就是您要寻求的关系:
alter table email
add constraint customer_fx foreign key (email_id) references customer (customer_id)
这将使两个表相关联,并将客户绑定到他们可能拥有的所有电子邮件(您可以限制),但是由于您的数据已经被劫持,因此您必须在应用约束之前对其进行修复。
答案 1 :(得分:0)
如果它与示例中的值刚好相差1,那么您可以这样做:
alter table emails add customer_id int not null default 0;
update emails set customer_id = email_id;
update emails set customer_id = customer_id-1 where email_id > 2;
alter table emails add constraint custEmail
foreign key (Customer_id)
references customers(customer_id);
select *
from customers
left join emails on customers.customer_id = emails.customer_id;