我有两个表格,一个叫做联系人,另一个叫做数字。一个存储联系信息,看起来像这样
contacts
-------------------------------------------------------
| id | fname | lname | email | address | uid | uniqid |
-------------------------------------------------------
我的第二个表存储着属于特定联系人的电话号码,如下所示
numbers
---------------------
| id | number | cid |
---------------------
cid与联系人表上的uniqid相同,如何通过mysql获取第二行表上具有其编号的联系人行?
更新 更正正确答案
SELECT id ,fname ,lname ,email ,address , uid, uniqid,number
FROM contacts a
inner join (SELECT cid, GROUP_CONCAT(DISTINCT number SEPARATOR ',') number FROM numbers) b ON b.cid=a.uniqid
缺少DISTINCT
答案 0 :(得分:2)
使用加入
select id ,fname ,lname ,email ,address , uid, uniqid,number
from contacts a
inner join numbers b on b.cid=a.uniqid
答案 1 :(得分:1)
您可以映射两个ID,以确保将其作为表索引,以便更快地检索数据。
TM_CCOEFF
答案 2 :(得分:1)
只需将内部联接与n.cid = c.uniqid一起使用
select c.id,c.fname,c.lname,c.email,c.address,c.uid,c.uniqid,n.number
from contacts c
inner join numbers n
on n.cid = c.uniqid
答案 3 :(得分:1)
在这里使用连接是正确的选择:
SELECT con.*,num.* from contacts as con inner join numbers as num on con.uniqid = num.cid
答案 4 :(得分:1)
您可以使用GROUP_CONCAT
将多个数字排成一行,然后当您暗示联接时将不会重复。
select `id` ,`fname` ,`lname` ,`email` ,`address` , `uid`, `uniqid`,`number`
from `contacts` a
inner join (Select `cid`, GROUP_CONCAT(`number` seperator ',') `number` from `numbers`) b on b.cid=a.uniqid
答案 5 :(得分:1)
在这里,我们使用foreign key
的概念。这里的cid
是号码表上的联系人表的foreign key
。我们必须将primary key
表的contact
与数字表的外键匹配。如果两者都匹配,则显示结果。
Select a.id, a.fname, a.lname, a.email, a.address,
a.uid, a.uniqid,b.number from contact a, number b where a.id=b.id;