说我有2个表,其结构如下:查询与外键
TABLEA
ID | A1 | A2
tableB的
ID | tableA_id(外键)| B1
A中的条目与B中的条目有一对多的关系。我需要什么类型的查询操作“类似这样的:从表B中选择所有对象,其中A1 =”foo“ “?基本上,适用于tableA的查询,并从这些结果,发现TableB中相应的依赖对象
说我有2个表,其结构如下:查询与外键
TABLEA
ID | A1 | A2
tableB的
ID | tableA_id(外键)| B1
A中的条目与B中的条目有一对多的关系。我需要什么类型的查询操作“类似这样的:从表B中选择所有对象,其中A1 =”foo“ “?基本上,适用于tableA的查询,并从这些结果,发现TableB中相应的依赖对象
这将有来表现最好的一个连接:
select
B.*
from
tableB as B
join tableA as A
on B.tableA_id=A.id
where
A1='foo'
SELECT * FROM tableB的WHERE tableA_id IN(SELECT ID FROM表A WHERE A1 =“foo”);
子查询我的朋友。
MySQL和Oracle的工作很好。不了解SQL Server。希望是你在找什么。
如果作品,请让我知道! – 2010-05-30 00:58:05
这个也可以,谢谢!子查询和连接之间是否存在性能差异? – theactiveactor 2010-05-30 01:35:20
它依赖于数据库引擎......但通常连接会消耗更多的内存,因为两个表都必须跨越到内存中......并且当您使用子查询时它更有效率,因为您一次只查询一次查询,并且只使用一小部分表格,并没有加入... 但是像Oracle 10g这样的一些数据库引擎改善了对连接和类似事情的查询优化......任何方式......我喜欢内部连接很多年以前... 在我个人的体验中,如果您使用的数据库引擎支持子查询,请使用它们而不是连接。 – 2010-05-30 02:52:35
你需要连接表A和B的结果发出一个查询:
select * from
tableA join tableB
ON tableA.A1 = tableB.tableA_id
WHERE tableA.A1 = 'foo'
+1。进一步阅读,“SQLite支持什么连接?”:http://stackoverflow.com/questions/774475/what-joins-does-sqlite-support – 2010-05-30 00:57:53
连接的可视化解释:http://www.codinghorror.com/blog /2007/10/a-visual-explanation-of-sql-joins.html – 2010-05-30 01:03:42
完美地工作,谢谢! – theactiveactor 2010-05-30 01:09:45