2012-06-18 66 views
-1

请帮我加入命令的结果(MS SQL):加入SQL结果

SELECT name,value FROM table1 WHERE idfoo1 IN(SELECT _id FROM table3 where id = 1); 
SELECT value FROM table2 WHERE idfoo2 IN(SELECT _id_2 FROM table3 where id = 1) AND name='fooname'; 

我也得到:

name value 
John 2  
Bill 32  
Alex 11 

value 
434 
234 
144 

但我需要加入的结果。 !

name value value 
John 2  434 
Bill 32 234 
Alex 11 144 

所以,ID == ID,_id = _id_2,

回答

3

使用此查询:

SELECT t1.name, 
     t1.value, 
     t2.value 
FROM table1 t1 
INNER JOIN table3 t3 ON t1.idfoo1 = t3._id 
INNER JOIN table2 t2 ON t2.idfoo2 = t3._id_2 
WHERE t3.id=1 AND t2.name = 'fooname' 
+0

这应该被删除“WHERE t3.id = 1和t2.name ='fooname'” – mcuw

+0

@mcuw按预期移除。 –

+0

我实际上首选筛选器作为where子句中的筛选器,因为它们在技术上不是加入标准。 –

1
Select a.name,a.value,c.value FROM table1 as a inner join table3 as b 
on a.idfoo1=b.id and b.id=1 inner join table3 as c 
on c.idfoo2=b._id_2 and b.id=1 and c.name='fooname' 
-2

我想这就是你需要 -

SELECT t1.name, t1.value, t2.value 
FROM table1 t1, table2 t2, table3 t3 
WHERE 
    t1.idfoo1 = t3._id 
    AND t2.idfoo2 = t3._id_2 
    AND t3.id = 1 
    AND t2.name='fooname'; 
+0

谁在投票?它甚至不解析,它使用的是远离最佳实践的旧式联接。 –

+0

我不同意你的“旧式加入”思想观点。目前已经有100多个讨论围绕这一点展开,没有确切的结论。内部连接的唯一理由是它将'连接标准'与'where子句'分开。我同意内部连接在非常复杂的查询情况下更具可读性。除此之外,两者之间没有性能差异,并且我个人更喜欢在简单连接中使用隐式连接来简化查询。这取决于个人喜好,哪个人使用。 – Kshitij

+0

旧式连接的危险在于,无意中派生笛卡尔产品变得更加容易,正是因为连接标准和过滤标准被压缩在一起。如果您必须向查询添加左连接,现在您必须处理混合样式的查询。为什么不一直使用更现代的风格呢?保存14个字符真的让你的查询更简单吗?阅读[此博客文章](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx)。 –