连接的SQL子查询-

连接的SQL子查询-,sql,sql-server,join,Sql,Sql Server,Join,是否可以从此SQL中删除子查询 表有两个属性“id”和“field” 许多字段可以具有相同的Id 这些表有许多具有相同Id和不同值的寄存器 需要时,使用其中一个(如筛选器)获取所有相同的Id值 select * from Table where id = (select id from Table where value = 'someValue') 我想这可能很容易,但我不知道怎么做。编辑(正确答案): 我认为你的问题是: 你有价值。让我们假设它是“testValue”。现在,您需要获

是否可以从此SQL中删除子查询

表有两个属性“id”和“field” 许多字段可以具有相同的Id

这些表有许多具有相同Id和不同值的寄存器

需要时,使用其中一个(如筛选器)获取所有相同的Id值

select *  
from Table 
where id = (select id from Table where value = 'someValue')
我想这可能很容易,但我不知道怎么做。

编辑(正确答案):

我认为你的问题是:
你有价值。让我们假设它是“testValue”。现在,您需要获取该值的id,并查找具有相同id的所有其他数据集。 必须清除的是,“ID”不是主键,也不是唯一的

您应该能够通过简单的自联接来解决此问题:

select t.* from Table t right join Table tt on tt.id = t.id where tt.value = 'someValue';
因此,由于连接,您将得到一个只返回表的结果。使用where子句可以将结果收缩为您的值。你应该得到一组ID



旧答案:

这应该可以做到:

select * from Table a inner join Table2 b on a.id = b.id where b.value = 'someValue';
你在问题中只提到了一张桌子。我想这一定是个错误。如果没有,您只需更改我的查询中的
表2
。但这毫无意义,因为你也可以做一个简单的查询:

select * from Table where value = 'someValue';
这将是使用自联接的第一个查询的结果。

已编辑(正确答案):

我认为你的问题是:
你有价值。让我们假设它是“testValue”。现在,您需要获取该值的id,并查找具有相同id的所有其他数据集。 必须清除的是,“ID”不是主键,也不是唯一的

您应该能够通过简单的自联接来解决此问题:

select t.* from Table t right join Table tt on tt.id = t.id where tt.value = 'someValue';
因此,由于连接,您将得到一个只返回表的结果。使用where子句可以将结果收缩为您的值。你应该得到一组ID



旧答案:

这应该可以做到:

select * from Table a inner join Table2 b on a.id = b.id where b.value = 'someValue';
你在问题中只提到了一张桌子。我想这一定是个错误。如果没有,您只需更改我的查询中的
表2
。但这毫无意义,因为你也可以做一个简单的查询:

select * from Table where value = 'someValue';
这将是使用自联接的第一个查询的结果。

可以完成自联接

select T.Id,T.Field
from Table T
INNER JOIN  Table  TT
ON T.ID = TT.ID 
AND TT.Value = 'someValue'
可以进行自连接

select T.Id,T.Field
from Table T
INNER JOIN  Table  TT
ON T.ID = TT.ID 
AND TT.Value = 'someValue'
这应该行得通

select T1.* from Table T1 JOIN Table T2 ON T1.id = T2.id AND T2.value = 'someValue'
这应该行得通

select T1.* from Table T1 JOIN Table T2 ON T1.id = T2.id AND T2.value = 'someValue'

不确定你是否过度简化了你的例子,但你可以让它简单一点

select *  
from Table 
where value = 'someValue'

不确定你是否过度简化了你的例子,但你可以让它简单一点

select *  
from Table 
where value = 'someValue'


=
替换为
中的
为什么不直接使用
where value='someValue'
而不是子查询我不能用这个替换子查询,因为我可能有许多具有相同Id的寄存器。。。。其中id位于(…)。。。在我看来,这是最自我描述的;联接使查询更难阅读。不要担心速度-sql server内部优化器应该处理这些简单的查询。联接不一定是替换
条件中的
——这在语义上是两件不同的事情。将
=
替换为
中的
,为什么不直接使用
where value='someValue'
而不是子查询呢无法用此替换子查询,因为我可能有许多具有相同Id的寄存器。。。。其中id位于(…)。。。在我看来,这是最自我描述的;联接使查询更难阅读。不要担心速度-sql server内部优化器应该处理这些简单的查询。联接不一定是
条件下的
的替代品-这在语义上是两件不同的事情。@Namrehs Ok,我编辑它是为了执行自联接。但是这个查询的用途在哪里?为什么不让
select*从value='someValue'
的表中选择?@NAMRehs-我注意到,但是,在这种情况下,您根本不需要重复该表-在我看来,实际上可能有两个表-这是一些令人困惑的问题之一,因为我不能用这个替换子查询,因为我可能有许多具有相同Id和不同值的寄存器sok@Tincho。那么,让我们为您找到一个解决方案。要理解你的问题:你有一个表,id不是PK。这些ID可以被复制。您希望找到一个值的相同id。因此,您搜索值“test”并获取和id。现在,您希望找到所有相同的ID。我将尝试找到解决方案并编辑我的答案。@Tincho我已更正了我的答案。现在应该是正确的。@Namrehs好的,我编辑它是为了执行自联接。但是这个查询的用途在哪里?为什么不让
select*从value='someValue'
的表中选择?@NAMRehs-我注意到,但是,在这种情况下,您根本不需要重复该表-在我看来,实际上可能有两个表-这是一些令人困惑的问题之一,因为我不能用这个替换子查询,因为我可能有许多具有相同Id和不同值的寄存器sok@Tincho。那么,让我们为您找到一个解决方案。要理解你的问题:你有一个表,id不是PK。这些ID可以被复制。您希望找到一个值的相同id。因此,您搜索值“test”并获取和id。现在,您希望找到所有相同的ID。我将尝试找到解决方案并编辑我的答案。@Tincho我已更正了我的答案。现在应该是正确的。不一定正确(当存在具有不同值的重复id时)。同意。但如果给出模糊的解释,就不可能说出他们想要什么。不一定正确(当存在具有不同值的重复id时)。同意。但由于解释含糊不清,不可能说出他们想要什么。