2015-10-26 133 views
0

我有一個數據庫表,我想搜索兩次,第一次建立滿足一定條件的條目列表,然後使用該列表來限制我的第二個顯示ALL具有匹配「名稱」的條目MySQL子查詢:在同一個表優化多個查詢

以下查詢做我想要的,但它永遠需要有一個簡單的選擇,運行更優化?

SELECT * FROM voting WHERE name IN (SELECT name FROM voting WHERE yob=15) 

我也試過,

SELECT * FROM voting WHERE name = (SELECT name FROM voting WHERE yob=15) 

這並不能在所有的工作,但我想表明我想要做什麼的邏輯。謝謝。

+0

爲什麼需要搜索兩次?爲什麼'SELECT *從投票WHOBYR = 15'不足夠? – JRD

+0

好問題。這個想法是,我有多行同名,每行有不同的yob,有些yobs是15有些不是。我希望最終顯示ALL ROWS,而不管YOB,但只適用於那些至少有15個yob的名稱。我希望這是有道理的。 –

+0

很好的解釋,我明白了。 – JRD

回答

1

您可以切換到使用exists

SELECT v.* 
FROM voting v 
WHERE EXISTS (SELECT 1 FROM voting v2 WHERE v2.name = v.name AND yob = 15); 

對於此查詢,您想對voting(name, yob)的索引。

+0

索引確實是解決方案!非常感謝你的幫助。 –

0

你也可以嘗試這個,但應該有索引。

SELECT a.* FROM voting a JOIN 
(SELECT DISTINCT NAME FROM voting WHERE yob=15) AS b 
WHERE a.name = b.name; 

如果你有百萬計的數據在你的表,那麼也可能會卡住了一段時間。