說我有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