You need to enable JavaScript to run this app. 如何用子查询编写SQL获取已婚且租金超9000租户的姓名、邮箱、手机号
优惠活动
大模型
产品
解决方案
定价
更多

如何用子查询编写SQL获取已婚且租金超9000租户的姓名、邮箱、手机号

SQL语句修正方案

原代码问题

  • 语法错误:IN 子句不支持直接用 AND 拼接两个子查询的结果集
  • 逻辑冗余:已婚是PROFILES表本身的字段,不需要单独写子查询过滤
  • 细节问题:如果RENT是数值类型,加单引号会触发隐式类型转换,拖慢查询效率

可用修正写法

写法1:IN子查询实现(写法简单易读)

-- MySQL环境下的字符串拼接请用CONCAT(FIRST_NAME, ' ', LAST_NAME)
-- SQL Server环境下请用FIRST_NAME + ' ' + LAST_NAME
SELECT FIRST_NAME || ' ' || LAST_NAME AS FULL_NAME, PHONE, EMAIL
FROM PROFILES
WHERE 
  MARITIAL_STATUS = 'Y'
  AND PROFILE_ID IN (
    SELECT PROFILE_ID
    FROM TENANCY_HISTORIES
    WHERE RENT > 9000
  );

写法2:EXISTS关联子查询实现(大数据量场景性能更优)

SELECT p.FIRST_NAME || ' ' || p.LAST_NAME AS FULL_NAME, p.PHONE, p.EMAIL
FROM PROFILES p
WHERE 
  p.MARITIAL_STATUS = 'Y'
  AND EXISTS (
    SELECT 1
    FROM TENANCY_HISTORIES th
    WHERE th.PROFILE_ID = p.PROFILE_ID AND th.RENT > 9000
  );

说明

两种写法返回的结果完全一致:所有已婚、且至少存在一条租金高于9000的租住记录的租户的全名、邮箱、联系电话,且不会返回重复的租户数据。

内容的提问来源于stack exchange,提问作者S ri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 21:30:03