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

如何查询同一数据表中存在于所有Phone列的Phone1字段值?

解决方案:找出同时存在于Phone2和Phone3列中的Phone1值

嘿,我来帮你搞定这个SQL查询问题!你需要筛选出那些同时出现在Phone2和Phone3列中的Phone1字段值,也就是这个Phone1的值必须在Phone2集合里有匹配,同时在Phone3集合里也有匹配。先把你的原始数据表贴出来方便参考:

Phone1   Phone2   Phone3
123458   25689    8969860
25966    25966    123458
Null     123458   25966

核心思路

我们需要满足三个关键条件:

  1. Phone1的值不能是Null(因为SQL中Null和任何值比较都返回未知,无法匹配)
  2. Phone1的值必须存在于Phone2列的非Null值集合中
  3. Phone1的值必须存在于Phone3列的非Null值集合中

下面给你几种实用的实现方式:


方法1:使用IN子查询(直观易懂)

这种写法逻辑清晰,适合小型数据集:

SELECT DISTINCT Phone1
FROM phones
WHERE Phone1 IS NOT NULL
  AND Phone1 IN (SELECT Phone2 FROM phones WHERE Phone2 IS NOT NULL)
  AND Phone1 IN (SELECT Phone3 FROM phones WHERE Phone3 IS NOT NULL);
  • DISTINCT用来避免重复的结果行
  • 先排除Phone1本身为Null的情况,再检查它是否同时存在于Phone2和Phone3的有效值集合里

方法2:使用EXISTS子查询(性能更优)

如果你的数据表数据量较大,EXISTS会比IN更高效,因为它找到匹配行后就停止搜索:

SELECT DISTINCT p1.Phone1
FROM phones p1
WHERE p1.Phone1 IS NOT NULL
  AND EXISTS (SELECT 1 FROM phones p2 WHERE p2.Phone2 = p1.Phone1)
  AND EXISTS (SELECT 1 FROM phones p3 WHERE p3.Phone3 = p1.Phone1);

方法3:使用JOIN连接(适合复杂扩展场景)

如果后续需要添加更多列的匹配条件,JOIN的方式扩展性更好:

SELECT DISTINCT p.Phone1
FROM phones p
JOIN (SELECT DISTINCT Phone2 FROM phones WHERE Phone2 IS NOT NULL) p2 
  ON p.Phone1 = p2.Phone2
JOIN (SELECT DISTINCT Phone3 FROM phones WHERE Phone3 IS NOT NULL) p3 
  ON p.Phone1 = p3.Phone3
WHERE p.Phone1 IS NOT NULL;
  • 先分别提取Phone2和Phone3的非Null唯一值集合,再通过内连接筛选出同时匹配的Phone1值

结果验证

根据你的测试数据,以上三种方法都会返回:

Phone1
123458
25966

完全符合你“获取在所有Phone列中均存在的Phone1值”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:12:50