2010-05-30 176 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'