同一个表的所有记录由一个字段相关但由另一个字段查询 - sqlserver
Posted
技术标签:
【中文标题】同一个表的所有记录由一个字段相关但由另一个字段查询 - sqlserver【英文标题】:All records of the same table reladed by a field but queried by anothe field - sqlserver 【发布时间】:2019-06-14 15:02:49 【问题描述】:数据库:SQLSERVER 我有这张桌子:
id-description-code
1 -fdsdfsf -A
2 -ghggh -A
3 -tytytyty -B
4 -hjhjydx -A
我需要一个查询“过滤一个 id”(例如“2”)返回我通过“代码”关联的同一张表的所有记录
查找 id=2 结果应该是:
1 -fdsdfsf -A
2 -ghggh -A
4 -hjhjydx -A
我写了这两个有效的查询:
SELECT * FROM TABLE S2 INNER JOIN
(select * from TABLE
WHERE ID=2) S1
ON S1.CODE=S2.CODE
SELECT * FROM TABLE S2
WHERE S2.CODE IN (SELECT CODE FROM TABLE S1 WHERE ID =2)
您能否给我其他查询示例(使用不同的运算符,例如 CROSS APPLY、EXIST 或其他)以获得相同的结果
【问题讨论】:
你的例子有什么问题?您使用CROSS APPLY
、EXIST
和“其他”做了哪些尝试;为什么他们不工作?
【参考方案1】:
这似乎是一个奇怪的请求,只是寻找返回相同信息的可能方式。但是您似乎跳过了最简单的方法。请注意我是如何发布消耗性数据以便其他人可以编写查询的?你以后应该这样做。
declare @Something table
(
ID int
, description varchar(20)
, CODE char(1)
)
insert @Something values
(1, 'fdsdfsf', 'A')
,(2, 'ghggh', 'A')
,(3, 'tytytyty', 'B')
,(4, 'hjhjydx', 'A')
select *
from @Something s
join @Something s2 on s2.CODE = s.CODE
where s.ID = 2
或使用交叉应用
select *
from @Something s
cross apply (select * from @Something s2 where s2.CODE = s.CODE) x
where s.ID = 2
【讨论】:
这个答案有我需要的一切。感谢您建议使用此方法为下一个示例公开数据。 在内部交叉应用查询中放置“where”条件或插入“and s.ID = 2”有什么性能考虑? “性能考虑”是什么意思?我无法用如此笼统的东西回答其中的含义。如果您想知道,我建议您尝试两种方式并比较执行计划。另外,不要害怕race your horses。【参考方案2】:为什么让它变得比它需要的更复杂?
select * from sometable where code =
(select code from sometable where id=2)
【讨论】:
这是为了我的教学目的,我想找出所有可能的方法,而不关心性能和复杂性。我需要锻炼这些运算符 那么这里有无限可能。 请给我一些! 这不是免费的代码编写服务。我可以花几个星期写出各种奇怪的方法来做到这一点。但是为了什么目的?所以你可以看到一堆愚蠢的复杂方法来做一些超级简单的事情?以上是关于同一个表的所有记录由一个字段相关但由另一个字段查询 - sqlserver的主要内容,如果未能解决你的问题,请参考以下文章
如何查询一个oracle数据库中所有表的所有字段哪个包含特定字符串?