2016-06-25 155 views
0

我試圖找到執行上是這樣看的表的條件查詢的最佳方式:條件選擇與MYSQL,性能問題

 
primaryKey question  answer clientId 
    1  are you fine?  yes  Bob 
    2  are you fine?  no   Tom 
    3  what is your name Bob  Bob 
    4  What is your name Tom  Tom 

我在這個表的主鍵選擇所有答案的問題「你的名字是什麼」,但只爲那些回答「是」,「你好」(即我想檢索3)

我已經嘗試子查詢中的where子句像這樣:

 
SELECT primaryKey 
FROM (`questionTable`) 
WHERE clientId IN(
SELECT clientId FROM `questionTable` 
WHERE (question = "are you fine" AND answer = "yes") 
) 
AND question = "What is your name" 

這個查詢實際上從來沒有完成,它不會拋出任何錯誤,它只是永遠運行。

我發現的唯一解決方案涉及選擇使用clientId而不是主鍵,但這太慢了,我想找到一種方法來檢索一個查詢中的primaryKey。

+0

你需要證明你的表(我猜你沒有任何除了你的主鍵)的索引。你應該有一個問題表,你有問題的問題,問題,例如1,「你好」和2,「你的名字是什麼」,然後在你的表中添加一個問號,並添加一個索引。 clientId相同。 – Solarflare

回答

1

使用自聯接表:

SELECT t1.primaryKey 
FROM `questionTable` t1 
INNER JOIN `questionTable` t2 
    ON t1.clientId = t2.clientId 
WHERE t2.question = "are you fine?" AND 
     t2.answer = "yes" AND 
     t1.question = "What is your name" 

SQLFiddle

+0

@TimBiegeleisen好吧,關於加入它是更正確的。但爲什麼不「使用」? – splash58

+0

相信與否,我還沒有真正看到'USING'過於頻繁使用。我只是認爲明確說明正在完成的連接類型更好。 –

+0

此查詢不會返回正確的數據。 – Manish