要加入的SQL子查询 -

时间:2016-10-24 13:24:15

标签: sql sql-server join

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

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

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

需要使用其中一个像过滤器一样获取所有相同的Id值。

select *  
from Table 
where id = (select id from Table where value = 'someValue')

我认为这可能很容易,但我不知道该怎么做。

4 个答案:

答案 0 :(得分:1)

自我加入可以完成

select T.Id,T.Field
from Table T
INNER JOIN  Table  TT
ON T.ID = TT.ID 
AND TT.Value = 'someValue'

答案 1 :(得分:1)

不确定你是否过分简化了你的例子,但你可以让它变得更简单。

select *  
from Table 
where value = 'someValue'

答案 2 :(得分:0)

编辑(正确答案):

我认为你的问题是:
你有一个价值。我们假装它是“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';

您在问题中只提到了一个表格。我认为这一定是个错误。如果没有,则必须仅更改查询中的Table2。但这也没有意义,因为你也可以做一个简单的查询:

select * from Table where value = 'someValue';

这将是第一次使用自联接查询的结果。

答案 3 :(得分:0)

这应该有效

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