【问题标题】:Is there a way to select automatically the row pointed by an FK on a given table?有没有办法自动选择给定表上 FK 指向的行?
【发布时间】:2014-07-27 15:22:04
【问题描述】:

今天,在编写公司中每个开发人员每天都会编写的众多查询之一时,我偶然发现了一个问题。

我们使用的 DBMS 是 Sql Server 2008

例如,我在通常的 PERSON - DEPARTMENT db 示例中编写这样的查询

select * from person where id = '01'

这个查询返回一行:

id    name    fk_department
01    Joe     dp_01

问题是:有没有办法(可能使用插件)让 sql server 编写和执行这样的选择

select * from department where id = 'dp_01'

仅通过例如用鼠标单击包含 fk 值的单元格(示例查询中的 dp_01)?或者通过右键单击并选择类似(“转到指定值”)?

我希望我没有写出愚蠢或不可能的东西

【问题讨论】:

  • 我假设您在第二个查询中的意思是 person 而不是 department
  • 好吧,您可能需要将new feature request 设为Microsoft。我想是的。
  • @Rahul 。 . .这不是一个理想的功能。 SQL Server 已经提供了几种方法来实现 OP 正在寻找的功能。
  • @GordonLinoff,我对你的评论有点困惑。哪个特别的功能?如果我理解正确,OP想从人那里获取一组记录->说它返回person_id 10->然后他想点击返回的id并自动从部门获取匹配的记录。 MSSQL 中的哪个特定功能完全模拟了这种行为......帮助我理解?我知道还有其他方法,例如view(您所建议的)或stored proc,但这些都是手册,而不是 OP 正在寻找的。​​span>
  • @Rahul 。 . . OP 希望根据另一个表中的名称比较表中的值。这就是视图的设计目的。计算列是实现此目的的另一种方法。

标签: sql sql-server select query-optimization


【解决方案1】:

不是真的,但这似乎是一件愚蠢的事情。为什么要将 id 与部门名称混淆?

相反,您可以安排一些事情,以便您可以做:

select p.*
from person p
where department = 'dp_01';

您可以通过添加一个计算列department 来执行此操作,该列引用一个在部门表中查找值的标量函数。您可以阅读计算列 here

但是,计算列的性能特征会很差。特别是,它基本上需要对person 表进行全表扫描,即使这不合适。

另一种解决方案是创建一个视图v_person,其中包含您想要的其他列。然后你会这样做:

select p.*
from v_person p
where department = 'dp_01';

【讨论】:

  • 是的,如果我只想了解部门,视图将是一种解决方案,就像加入一样,我只是在寻找一种更快的方法来在给定 FK 的情况下进行选择(id我的部门)。由于我所有的外键都是物理的,Sql Server 现在应该搜索什么表。
【解决方案2】:

为什么你不能自己写自己说

select * from department where id = 
(select fk_department from person where id = '01')

【讨论】:

  • 是的,这就是我整天在各种桌子上做的事情,我只是在寻找一种更快的方法来完成它,比如点击时自动运行选择的超链接。我猜微软没有你在评论中指出的这样的功能
  • @frankieta,是的,这是真的。目前还没有这样的功能。
  • @frankieta,如果您想一步完成;考虑使用存储过程。
猜你喜欢
  • 2021-12-27
  • 1970-01-01
  • 2016-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多