2013-10-03 37 views
4

我有2個表,A,B根據來自其他表的條件在表上選擇記錄?

A: id is primary key and indexed 

id, type_id, status 
------------------ 
1, 1, True 
2, 1, False 
3, 2, False 
... 

B: (Type) type_id is primary key and indexed 

type_id, param 
---------- 
1, 23 
2, 35 
3, 24 

我想在B其中有status True

select distinct B.id, B.param 
from B 
join A on A.type_id = B.type_id 
where A.status = true 

A至少1相關的條目這是一個很好的方式選擇所有的行?

回答

7

我會做它用這種方式(它應該是有效的在大多數數據庫系統:

select * 
from b 
where type_id in (
    select type_id 
    from a 
    where status = true 
) 

要將有關,如果你是一個很好的方式,我的答案是毫無疑問的,這是不一個很好的方法,因爲它可能迫使大中間記錄集(通過連接),則耗時在中間的記錄集不同。

UPDATE

經過一番思考,我意識到沒有絕對的好或壞的解決方案。這一切都取決於你在每個表中的數據(總記錄,價值分佈等)。所以,當你在生產中遇到性能問題時,明確表達意圖並準備嘗試不同的意圖。

+0

更好/更快地解釋您的解決方案如何比OP更好/更快 – Nogard

1
SELECT B.* 
FROM B 
WHERE B.type_id 
IN 
(SELECT A.type_id 
    FROM A WHERE status='True' 
); 
+1

解釋您的解決方案如何比OPs – Nogard

相關問題