2017-09-22 94 views
0

我運行此查詢:MySQL的WHERE子句中SELECT MIN越來越忽略()子查詢

SELECT prop_numero, prop_id, prop_fase_id 
FROM propiedades 
WHERE prop_numero = (
    SELECT MIN(prop_numero) 
    FROM propiedades 
    WHERE prop_numero > 11 AND prop_fase_id = 2 
); 

而得到這樣的:

| prop_numero | prop_id | prop_fase_id | 
|-------------|---------|--------------| 
| 111   |  166 |   1 | 
|-------------|---------|--------------| 
| 111   |  233 |   6 | 
|-------------|---------|--------------| 
| 111   |  657 |   2 | 
|-------------|---------|--------------| 
| 111   |  658 |   4 | 
|-------------|---------|--------------| 

我期待着眼前這個:

| prop_numero | prop_id | prop_fase_id | 
|-------------|---------|--------------| 
| 111   |  657 |   2 | 
|-------------|---------|--------------| 

並不總是,但第二個WHERE子句(prop_fase_id = 2)被忽略。正常情況下,子查詢的第一個WHERE子句找到多於一行,因此第二個子句應該過濾掉大部分行,只留下一個,但不會,它會被忽略。

爲什麼?我試圖用不同的子查詢結構化,但我不需要結果。

+0

你是什麼意思忽略?解釋你試圖達到什麼目標,如果可能的話還有表格描述和一些樣本數據。 – Juan

+0

謝謝胡安。我的意思是它不會過濾掉prop_fase_id列中沒有'2'的行。我會發布一些數據。 – blackliquid

+0

我認爲你需要解釋更多關於你想要的結果。目前還不清楚爲什麼你使用min()作爲例子。子查詢將解析爲prop_numero,在本例中爲111.但主查詢將顯示所有記錄中prop_numero爲111的所有記錄。如果你想得到一個結果,主要查詢的條件應該在id而不是prop_numero上。 – Juan

回答

0

由於列prop_numero是NOTR鍵列,還需要prop_fase_id = 2添加到WHERE,即

SELECT prop_numero, prop_id, prop_fase_id 
FROM propiedades 
WHERE prop_numero = (
    SELECT MIN(prop_numero) 
    FROM propiedades 
    WHERE prop_numero > 11 AND prop_fase_id = 2 
) AND prop_fase_id = 2; 
+0

就是這樣。謝謝! – blackliquid