如何查询一对多关系

时间:2014-02-21 14:18:40

标签: php mysql sql database

我有两个数据库表,其中包含#34;一对多"关系

比方说,表A和表B

表A中的一个字段是表B中的外键 我想从表A和表B中获取一条记录(给出表A&#39的主键)

表A

id                name
--------------------
1                 ABC
2                 XYZ

表B

id              A_id                      email
------------------------------------------------
1                 1                 temp@temp1.com
2                 1                 temp@temp2.com
3                 1                 temp@temp3.com
4                 2                 temp@temp4.com
4                 2                 temp@temp5.com

答案应该是这样的(表B中的单一记录)

对于a.id = 1

A.id, A.name,B.email
-------------------------
1, ABC, temp@temp1.com

对于a.id = 2

A.id, A.name,B.email
-------------------------
1, XYZ, temp@temp4.com

我使用了这个查询,但它返回了表B中的所有记录(因为表B对表A中的每条记录都有多条记录)

SELECT a.id,a.name, b.email FROM A a, B b WHERE a.id = 1 AND b.A_id = a.id

3 个答案:

答案 0 :(得分:2)

尝试JOIN

SELECT 
    a.id,
    a.name,
    b.email 
FROM A a
LEFT JOIN B b ON b.A_id = a.id
WHERE a.id = 1;
GROUP BY b.A_id

More info on JOINS

答案 1 :(得分:2)

我在这里为演示创建了一个SQL小提琴:http://www.sqlfiddle.com/#!2/15ae7/5

可用于获取所需输出的查询是:

SELECT 
tableA.id,
tableA.name,
tableB.email 
FROM tableA
LEFT OUTER JOIN tableB ON tableB.A_id = tableA.id
GROUP BY tableB.A_id;

有关JOINS和GROUP BY的更多信息,请参阅以下页面:

http://dev.mysql.com/doc/refman/5.0/en/join.html

https://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

答案 2 :(得分:0)

如果您只想要一条记录,则可以使用LIMIT。

SELECT a.id,a.name, b.email FROM A a, B b WHERE a.id = 1 AND b.A_id = a.id LIMIT 0,1

希望这会对你有所帮助。