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

SQLite如何查找引用父表主键且含指定client_id值的关联子表

实现方案

你可以通过SQLite自带的系统表搭配动态查询实现需求,全程不需要提前知道子表名称,步骤如下:

步骤1:筛选所有包含client_id字段的子表

首先通过sqlite_master系统表搭配pragma_table_info,排除父表clients后,找出所有带client_id字段的业务表,SQL语句如下:

SELECT name AS table_name
FROM sqlite_master 
WHERE type = 'table'
  AND name != 'clients'
  AND EXISTS (
    SELECT 1 
    FROM pragma_table_info(sqlite_master.name) 
    WHERE name = 'client_id'
  );

注意:如果你实际场景中client_id字段名存在大小写不一致、带空格的情况(比如示例里的client _Id、client_Id),可以把过滤条件改成WHERE REPLACE(LOWER(name), ' ', '') = 'clientid'做模糊匹配,避免漏表。

步骤2:生成校验语句筛选符合条件的子表

上面的查询只能拿到所有带client_id的表,我们需要进一步判断每个表中是否存在client_id = 1的记录,SQLite不支持直接动态执行SQL,所以可以用下面的语句自动生成批量校验的SQL:

SELECT 'SELECT ''' || name || ''' AS matched_table WHERE EXISTS (SELECT 1 FROM ' || quote(name) || ' WHERE client_id = 1) UNION ALL'
FROM sqlite_master 
WHERE type = 'table'
  AND name != 'clients'
  AND EXISTS (
    SELECT 1 
    FROM pragma_table_info(sqlite_master.name) 
    WHERE REPLACE(LOWER(name), ' ', '') = 'clientid'
  );

把上面语句执行后得到的结果复制出来,删掉最后一行末尾的UNION ALL,再执行修改后的语句,就能直接输出所有存在client_id=1记录的子表。拿你给出的示例来说,最终执行后返回的结果就是Form Table1和form Table3,完全符合需求。


内容的提问来源于stack exchange,提问作者Youness El Azzaoui

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:36:01