有一个包含 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;
请帮我!
您应该能够使用limit
select 语句的子句来限制返回的行。
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
。
select
可以在此处找到MySQL 的完整语法详细信息,包括该limit
子句。
请记住,这limit
可能并不存在于所有数据库管理系统中(它存在于 MySQL 中,这是您的具体情况)。例如,DB2FETCH FIRST n ROWS
用来做类似的事情。
您可以使用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;
如果您想知道为什么您的数据库中每个配置文件有不止一张照片,您可能需要从以下结果中进行调试:-
SELECT * FROM profile pro, photo_profile ph WHERE pro.id_profile = ph.id_profile;
这只是 profile 和 photo_profile 表的简单连接。