2010-05-30 88 views
1

说我有2个表,其结构如下:查询与外键

TABLEA

ID | A1 | A2

tableB的

ID | tableA_id(外键)| B1

A中的条目与B中的条目有一对多的关系。我需要什么类型的查询操作“类似这样的:从表B中选择所有对象,其中A1 =”foo“ “?基本上,适用于tableA的查询,并从这些结果,发现TableB中相应的依赖对象

回答

3

这将有来表现最好的一个连接:

select 
    B.* 
from 
    tableB as B 
    join tableA as A 
     on B.tableA_id=A.id 
where 
    A1='foo' 
+1

+1。进一步阅读,“SQLite支持什么连接?”:http://stackoverflow.com/questions/774475/what-joins-does-sqlite-support – 2010-05-30 00:57:53

+1

连接的可视化解释:http://www.codinghorror.com/blog /2007/10/a-visual-explanation-of-sql-joins.html – 2010-05-30 01:03:42

+0

完美地工作,谢谢! – theactiveactor 2010-05-30 01:09:45

1

SELECT * FROM tableB的WHERE tableA_id IN(SELECT ID FROM表A WHERE A1 =“foo”);

子查询我的朋友。

MySQL和Oracle的工作很好。不了解SQL Server。希望是你在找什么。

+0

如果作品,请让我知道! – 2010-05-30 00:58:05

+0

这个也可以,谢谢!子查询和连接之间是否存在性能差异? – theactiveactor 2010-05-30 01:35:20

+0

它依赖于数据库引擎......但通常连接会消耗更多的内存,因为两个表都必须跨越到内存中......并且当您使用子查询时它更有效率,因为您一次只查询一次查询,并且只使用一小部分表格,并没有加入... 但是像Oracle 10g这样的一些数据库引擎改善了对连接和类似事情的查询优化......任何方式......我喜欢内部连接很多年以前... 在我个人的体验中,如果您使用的数据库引擎支持子查询,请使用它们而不是连接。 – 2010-05-30 02:52:35

1

你需要连接表A和B的结果发出一个查询:

select * from 
tableA join tableB 
ON tableA.A1 = tableB.tableA_id 
WHERE tableA.A1 = 'foo'