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

PL/SQL如何查询指定ID_HOUSE是否存在于所有关联外键表中

实现方案

方案1:高性能优先(推荐)

用EXISTS逻辑实现,只要任意从表命中匹配值就停止扫描,无需统计全量数据,性能远高于COUNT方案,尤其适合大表场景:

SELECT 
  CASE 
    WHEN EXISTS (SELECT 1 FROM Bedrooms WHERE ID_HOUSE = 455)
      OR EXISTS (SELECT 1 FROM Garden WHERE ID_HOUSE = 455)
      -- 新增其他从表时只需在此处追加 OR EXISTS 子查询即可
    THEN TRUE 
    ELSE FALSE 
  END AS is_exist_in_subtable;

方案2:COUNT+关联表实现(你提到的思路)

适合需要同时统计关联数据量的场景,注意要加DISTINCT避免多表关联导致的行数重复膨胀,否则COUNT计数会失真:

SELECT 
  CASE WHEN COUNT(DISTINCT h.ID_HOUSE) > 0 THEN TRUE ELSE FALSE END AS is_exist_in_subtable
FROM House h
LEFT JOIN Bedrooms b ON h.ID_HOUSE = b.ID_HOUSE
LEFT JOIN Garden g ON h.ID_HOUSE = g.ID_HOUSE
-- 新增其他从表时只需在此处追加LEFT JOIN,同时在下方WHERE条件补充对应非空判断
WHERE h.ID_HOUSE = 455
  AND (b.ID_HOUSE IS NOT NULL OR g.ID_HOUSE IS NOT NULL);

注意事项

如果从表数量超过3个、单表数据量大于10万,优先选择方案1,多表关联的笛卡尔积会导致方案2的性能大幅下降。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:36:08