我有三张桌子:
列表(盖,LIST_NAME)
电话(PID,盖,PHNO)
电子邮件(EID,盖,电子邮件)
具有此处所示记录的表
lid ----------- list_name
**1** ------------- **ads**
**2** ------------- **visits**
pid ------- lid ----------- phno
10 ---------**1** ---------- 9988123456
20 ---------**1** ---------- 9988123454
30 ---------**2** ---------- 9988222222
40 ---------**2** ---------- 9988333333
eid ------- lid ----------- email
1 ---------**1** ---------- xyz@abc.com
2 ---------**1** ---------- abc@abc.com
3 ---------**2** ---------- list2@abc.com
4 ---------**2** ---------- list21@abc.com
我想用外键盖创建表格电子邮件和手机之间的连接。
我试过这样的
SELECT * FROM phone left join emails on phone.lid = emails.lid WHERE 1
并从此查询获得输出
pid -- lid ---- phno ---------- eid --- lid --- email
10 ----- 1 --- 9988123456 -- **1** --- 1 --- xyz@abc.com
20 ----- 1 --- 9988123454 ---**1** --- 1 --- xyz@abc.com
10 ----- 1 --- 9988123456 ---**2** --- 1 --- abc@abc.com
20 ----- 1 --- 9988123454 ---**2** --- 1 --- abc@abc.com
30 ----- 2 --- 9988222222 -- **3** --- 2 --- list2@abc.com
40 ----- 2 --- 9988333333 ---**3** --- 2 --- list2@abc.com
30 ----- 2 --- 9988222222 ---**4** --- 2 --- list21@abc.com
40 ----- 2 --- 9988333333 ---**4** --- 2 --- list21@abc.com
在这里你可以看到我们收到重复的电子邮件和重复的电话号码,但我希望结果是任何行都不应该有任何重复的电子邮件和重复的电话,它们都必须是唯一的,如下所示:
pid -- lid ---- phno ---------- eid --- lid --- email
20 ----- 1 --- 9988123454 ---**1** --- 1 --- xyz@abc.com
10 ----- 1 --- 9988123456 ---**2** --- 1 --- abc@abc.com
30 ----- 2 --- 9988222222 -- **3** --- 2 --- list2@abc.com
40 ----- 2 --- 9988333333 ---**4** --- 2 --- list21@abc.com
我被困在这里。请建议我解决方案。
答案 0 :(得分:0)
您的表格结构不允许您获得预期的输出。 在表Phone中(根据给定的数据) lid 不能是候选键。表Emails中的 lid 也是如此。
lid 不能用作外键。 外键必须引用父表的主键或唯一键(候选键)。但在任何一个表中都不是这种情况。
我建议引入一个新列来获得您需要的一对一映射