You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写SQL查询显示dvdrental数据库中共享地址的客户姓名?

修复SQL查询:找出共享同一地址的客户

你的查询存在两个核心问题:

  • 语法错误:SELECT子句里a.address和COUNT(a.address_id)之间缺少逗号,这是执行报错的直接原因。
  • 逻辑错误:按c.first_name, c.last_name, a.address分组时,每个客户的姓名+地址组合都是唯一的,导致COUNT(a.address_id)永远等于1,HAVING条件永远无法满足,查不出任何结果。

正确的思路是先筛选出被多个客户共享的地址ID,再关联客户表和地址表获取对应客户信息。

修复后的查询语句

方法1:子查询筛选共享地址

SELECT c.first_name, c.last_name, a.address
FROM customer c
JOIN address a ON c.address_id = a.address_id
WHERE c.address_id IN (
    SELECT address_id
    FROM customer
    GROUP BY address_id
    HAVING COUNT(*) > 1
)
ORDER BY a.address, c.last_name;

方法2:JOIN方式替代子查询(性能更优)

SELECT c.first_name, c.last_name, a.address
FROM customer c
JOIN address a ON c.address_id = a.address_id
JOIN (
    SELECT address_id
    FROM customer
    GROUP BY address_id
    HAVING COUNT(*) > 1
) shared_addr ON c.address_id = shared_addr.address_id
ORDER BY a.address, c.last_name;

说明

  • 子查询先定位所有被2个及以上客户使用的address_id。
  • 主查询仅保留这些地址对应的客户记录,最后按地址和姓氏排序,方便直观查看同一地址下的所有客户。

内容的提问来源于stack exchange,提问作者Baby E

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 17:29:50