2017-05-29 57 views
0

我有数据库这种类型的记录:SQL连接与普通数据选择两个记录

Id  | Value | DocId | 
------ | ------ | ------| 
1  | 10 | null | 
2  | -10 | 1 | //this is child of record with id = 1 
3  | 15 | null | 
4  | -15 | 3 | //this is child of record with id = 3 
5  | 7  | null | 
6  | -7  | 5 | //this is child of record with id = 5 
7  | 16  | null | 

所以我要选择的记录,其中Id = 1Id = DocId,所以这应该返回(因为这些记录与Id = 1DocId = 1

Id  | Value | DocId | 
------ | ------ | ------| 
1  | 10  | null | 
2  | -10 | 1 | 

我知道我可以使用where子句,但我需要做的是与加入。

+1

添加更多一些样本数据行,还可以将预期结果指定为格式化文本。 – jarlh

+0

查询看起来很好。你应该得到一排六列(第一个记录三个,第二个三个)。你不是吗? –

+1

关于用例的更多细节也会有所帮助。 id代表什么,id和docId之间的关系是什么?什么是您正在寻找的真实世界信息(即什么是业务需求)。 – John

回答

0

可以如同它们是两个独立的表从同一个表两次选择:

SELECT * FROM TheTable T1,T2 TheTable其中t1.id = t2.DocId;

0

您显示的结果为where id = 1 or docid = 1。那么为什么你必须使用连接呢?这似乎没有道理。总之,在这里你去:

select t.* 
from t 
join (select 1 as id) x on x.id in (t.id, t.docid); 
0

你是说你想要的记录中,其中ID = 1或的docId = 1,所以在SQL你可以说几乎正是:

select * from my_table where id = 1 or docId = 1; 
+1

OP写道:“我知道我可以使用where子句,但我需要用Join来完成它。” –

+0

为什么你需要通过一个连接复杂化? – John

+0

是的,我想知道:-)然而,看起来OP *确实知道如何用where子句解决这个问题,但是出于某种奇怪的原因需要一个带有连接的解决方案。 –