是否可以从此SQL中删除子查询?
表有2个属性“id”和“field” 许多字段可以具有相同的Id。
这些表有许多具有相同Id和不同值的寄存器
需要使用其中一个像过滤器一样获取所有相同的Id值。
select *
from Table
where id = (select id from Table where value = 'someValue')
我认为这可能很容易,但我不知道该怎么做。
答案 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'