拥有一个包含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;
请帮助我!
答案 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将无法保证您获得哪个行。
例如,假设您在表格中有以下名称:Allan
,Barbara
,Colin
和Debbie
。查询:
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)
您可以根据需要使用LIMIT
或GROUP 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表的简单连接。