2012-07-27 94 views
0

SELECT聲明正常工作,但我希望能夠重複它以進一步優化搜索。重複SELECT語句

SELECT id1 
FROM table1 
WHERE id2 IN (SELECT id 
       FROM table2 
       WHERE name="country" 
       AND value="Mexico") 

舉例來說,如果我想找到有「海灘」,這將是墨西哥唯一地點:

name="features" AND value="Beaches" 

...我將如何去進一步削減的結果了我SELECT聲明?

+0

我錯過了什麼?只需將這些過濾器添加到您的查詢中(這些值存儲在哪個表中) – Limey 2012-07-27 17:07:47

+0

您能否澄清一下關於「精煉」的更多信息。如上所述,您要求的是「value =」墨西哥「AND value =」Beaches「',這是一個空的結果集。 – 2012-07-27 17:19:08

回答

1

也許最好的方法是執行一個新的查詢,並添加額外的過濾。可以在客戶端應用程序中「手動」過濾,但在大多數情況下,這可能效率較低。所以有更多的限制運行新的查詢:

SELECT id1 FROM table1 WHERE id2 IN 
     (SELECT id FROM table2 WHERE 
       name="country" AND 
       value="Mexico" AND 
       name2 = "features" AND 
       value2 = "Beaches") 

注意,我換了兩個新的列名不同的東西(原始查詢結果不會給出包含原始名稱的其他值)。如果「細化」,你想添加那麼也許查詢應該是:

SELECT id1 FROM table1 WHERE id2 IN 
     (SELECT id FROM table2 WHERE 
       (name="country" AND 
       value="Mexico") OR 
       (name = "features" AND 
       value = "Beaches")) 
+0

馬克,OP想要滿足這兩個條件的記錄。你提供的是另一種選擇。 – 2012-07-27 17:11:31

+0

@KubaWyrostek:第一個查詢是試圖顯示OP特別要求的內容。而且,是的,第二個是另一個選擇。如上所述,OP實際上不能用非空結果集來實現。爲了嚴格遵循請求,OP要求「value =」Mexico「AND value =」Beaches「,這是一個空的結果集。 – 2012-07-27 17:17:49

0

Vecta,你需要通過添加額外的插件來擴展您的查詢:

SELECT id1 
FROM table1 
WHERE id2 IN (SELECT id 
      FROM table2 
      WHERE name="country" 
      AND value="Mexico") 
AND id2 IN (SELECT id 
      FROM table2 
      WHERE name="featues" 
      AND value="Beach") 

請考慮到雖然,這將導致性能下降非常快。 :-)