2012-06-03 31 views
1

我一直在爲這個選擇苦苦掙扎了一段時間,我一直在尋找StackOverflow並嘗試了一堆東西,但沒有什麼能夠幫助我解決特定問題。也許我只是錯過了一些明顯的東西。基於MySQL中子表數據的行選擇

我有兩個表:測量,MeasurementFlags

「測量」包含從設備的測量,並且每次測量可具有附連到它們(通常被稱爲「標誌」)的屬性/特性,以表示在測量中問題在某種程度上是特殊的(例如,一個標誌可能意味着測試或校準測量)。注意:每個標誌一個記錄!

對,所以「測量」表中的記錄在理論上可以附加無限量的MeasurementFlags,或者它可以沒有。

現在,我需要從「測量」中選擇記錄,其中附有「MeasurementFlag」,值爲「X」,但它也必須沒有標記爲「Y」的標記。

我們正在談論一個擁有數億行的相當大的數據庫,這就是爲什麼我試圖將所有這些邏輯都保留在一個查詢中的原因。拆分它會產生太多的查詢,但是如果在一個查詢中無法做到,我想我沒有選擇。

在此先感謝。

回答

2
SELECT measurements.* 
FROM measurements 
INNER JOIN measurement_flag 
     ON measurements.measurement_id = measurement_flag.measurement_id 
     AND flag = 'X' 
     AND 'Y' NOT IN (
       SELECT flag 
       FROM measurement_flag 
       WHERE measurement_id = measurements.measurement_id); 
+0

謝謝,這工作就像一個魅力!它不僅工作,而且速度也很快,儘管行數很多,但幾毫秒內就完成了! – Felthragar