在sql上获得一个结果

时间:2012-11-10 05:17:11

标签: mysql sql database

拥有一个包含2张桌子的网站(个人资料和照片)。我希望获得一张带照片的个人资料,但我会收到许多相同资料的照片。我只想要一个。

SELECT ph.path as photo, pro.id_profile, pro.name, pro.address 
FROM profile pro, photo_profile ph 
WHERE pro.id_profile = 41 
AND pro.id_profile = ph.id_profile;

请帮助我!

3 个答案:

答案 0 :(得分:2)

您应该能够使用select语句的limit子句来限制返回的行。

SELECT ph.path as photo, pro.id_profile, pro.name, pro.address 
FROM profile pro, photo_profile ph 
WHERE pro.id_profile = 41 
AND pro.id_profile = ph.id_profile
LIMIT 1;

请记住,如果没有ORDER BY子句,SQL将无法保证您获得哪个行。

例如,假设您在表格中有以下名称:AllanBarbaraColinDebbie。查询:

select name from people limit 1;

会为您提供一行,但不确定。另一方面:

select name from people order by name asc limit 1;

会给你Allan

可以找到MySQL select的完整语法详细信息here,包括limit子句。

请记住,limit可能不在所有数据库管理系统中(在MySQL中 ,这是您的具体情况)。例如,DB2使用FETCH FIRST n ROWS来做类似的事情。

答案 1 :(得分:0)

您可以根据需要使用LIMITGROUP BY,使用正确的JOIN可以提高可读性:

要获得您的集合的第一个结果,请使用LIMIT

SELECT ph.path as photo, pro.id_profile, pro.name, pro.address 
FROM profile pro
JOIN photo_profile ph ON 
WHERE pro.id_profile = 41 AND pro.id_profile = ph.id_profile 
LIMIT 1;

要按个人资料ID对结果进行分组,请使用GROUP BY

SELECT ph.path as photo, pro.id_profile, pro.name, pro.address 
FROM profile pro
JOIN photo_profile ph ON pro.id_profile = ph.id_profile
WHERE pro.id_profile = 41 
GROUP BY pro.id_profile;

答案 2 :(得分:0)

如果您想知道为什么您的数据库每个配置文件有多张照片,您可能需要根据以下结果进行调试: -

SELECT * FROM profile pro, photo_profile ph WHERE pro.id_profile = ph.id_profile;

这只是profile和photo_profile表的简单连接。