1

有一个包含 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;

请帮我!

4

3 回答 3

4

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

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 将无法保证您获得哪一行。

例如,假设您在表中有以下名称:AllanBarbara和。查询:ColinDebbie

select name from people limit 1;

会给你排,但不确定的一排。另一方面:

select name from people order by name asc limit 1;

会得到你Allan

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

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

于 2012-11-10T05:20:07.530 回答
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;
于 2012-11-10T05:19:35.140 回答
0

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

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

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

于 2012-11-10T05:22:12.020 回答