如何修正SQL查询:匹配user_id时获取property表全部字段无重复
修正后的SQL查询语句
问题分析
你的查询存在两个关键问题:
- JOIN条件错误:当前的
ON子句写的是property.user_id=16,这会让property表中所有user_id=16的记录和users表的所有记录进行关联,产生笛卡尔积,导致重复数据。正确的关联条件应该是两张表的user_id匹配,即property.user_id = users.user_id。 - 不需要返回
users表字段:你只需要property表的全部字段,因此不能用SELECT *(会返回两张表的所有字段),应该明确指定property.*。
修正后的查询语句
如果你想获取所有在users表中有匹配user_id的property记录:
SELECT property.* FROM `property` INNER JOIN `users` ON `property`.`user_id` = `users`.`user_id`;
如果想保留property表中所有记录(即使users表中没有匹配的user_id),但只显示property的字段:
SELECT property.* FROM `property` LEFT JOIN `users` ON `property`.`user_id` = `users`.`user_id`;
如果需要筛选特定user_id(比如16)的记录,可以加上WHERE子句:
SELECT property.* FROM `property` INNER JOIN `users` ON `property`.`user_id` = `users`.`user_id` WHERE `property`.`user_id` = 16;
内容的提问来源于stack exchange,提问作者Zayb
相关产品推荐
相关产品推荐

