Sybase 查看与目标表有外键关联的表名称

本文介绍了一种复杂的SQL查询方法,用于从指定的TestTable表中获取相关信息。通过使用多个表连接和条件筛选,能够准确地找到表之间的外键关联。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目标表为:TestTable

select sysobjects.name FK_Name,a.*
from
(select constrid,sysreferences.tableid,a.name as tablename,sysreferences.reftabid,b.name as reftabname
from sysreferences
LEFT OUTER join sysobjects a on sysreferences.tableid = a.id
LEFT OUTER join sysobjects b on sysreferences.reftabid = b.id ) a,
sysobjects
where a.constrid = sysobjects.id
and (tableid = object_id('TestTable') or reftabid=object_id('TestTable'))
<think>好的,用户现在的问题是“查看A 的B 关联了哪个”,需要提供一个Oracle数据库中的查询方法。首先,我需要回顾之前给出的解决方案,确保这次回答一致且准确。 用户之前询问过如何查询关联,我给出了三个场景的SQL语句。现在用户的具体情况是已知名(A)和约束名(B),需要找到关联的主。这应该对应场景1或场景2的情况。需要确定用户是否记得名称,或者是否需要通过名来查找。但根据当前问题,用户已经明确提供了名称B,所以属于已知名称的情况,应该使用类似场景1的查询。 接下来,我需要检查之前提供的场景1的SQL是否适用于这种情况。原来的场景1是已知约束名称,直接查询主和从的信息。现在用户已知A和B,可能需要稍微调整查询条件,既包括约束名称,也包括名,以确保准确。例如,可能需要同时指定约束名称名,避免不同下有同名的情况。 另,用户可能没有说明当前用户是否有权限访问这些数据字典视图,比如是否需要使用ALL_CONSTRAINTS还是USER_CONSTRAINTS。但通常,如果用户知道自己的在哪个schema下,使用USER_CONSTRAINTS会更直接。不过为了保险起见,应该在查询中包括owner条件,或者提示用户注意schema的问题。 还需要考虑SQL的正确性,确保连接条件正确关联到主的约束。例如,在JOIN的时候,使用r_owner和r_constraint_name来连接主的约束。同时,确保约束类型是'R',约束。 可能还需要添加列名,例如主名,字段和主字段,这样用户能清楚看到关联关系。在之前的例子中,已经包含了这些列,所以可以直接复用,但需要调整WHERE子句,同时约束名和约束名称。 此,需要注意大小写的问题,Oracle默认情况下对象名称是大写的,如果用户输入的是小写,可能需要用引号,或者提醒用户注意大小写匹配。例如,如果名称数据库中存储为“FK_B”,而用户查询时使用'B',可能会找不到,所以可能需要使用大写,或者在查询中使用UPPER函数转换。 最后,要给出示例,比如替换名和名为实际值,并提醒用户替换,同时说明结果中的主信息。可能还需要提到权限问题,如果用户没有看到结果,可能需要检查是否有权限访问相关视图,或者是否在正确的schema下。 总结,需要调整之前的场景1的查询,添加名作为过滤条件,同时确保约束名称正确,并给出清晰的示例和注意事项。</think>在Oracle中查看A的B具体关联到哪个主,可以使用以下SQL查询(需替换实际名和约束名): ```sql SELECT fk.table_name AS "从", fk.constraint_name AS "名称", pk.table_name AS "主", pk.constraint_name AS "主约束名" FROM user_constraints fk JOIN user_constraints pk ON fk.r_constraint_name = pk.constraint_name AND fk.r_owner = pk.owner WHERE fk.constraint_type = 'R' -- 限定约束 AND fk.table_name = 'A' -- 替换你的实际名(注意大小写) AND fk.constraint_name = 'B'; -- 替换你的约束名(注意大小写) ``` ### 关步骤说明: 1. **连接原理** - 通过 `r_constraint_name` 字段关联到主的主/唯一约束 - `r_owner` 确保跨schema时的正确关联 2. **结果解读**: - `主`:指向的目标表 - `主约束名`:主中被引用的主/唯一约束名称 3. **注意事项**: - 如果查询无结果,请检查: - 名和名称是否**大小写一致**(Oracle默认存储大写名称) - 是否在正确的schema下执行(可用 `FROM all_constraints` 并添加 `fk.owner = 'SCHEMA_NAME'` 条件) - 是否有权限访问约束信息(DBA可使用 `dba_constraints` 视图)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值