2016-04-17 39 views
3

我在互聯網上搜索了幾個小時,但沒有發現任何幫助我的東西。這裏是我的問題...SQL - 選擇條件爲true的條件,但刪除是否存在另一條打破條件的行

我的表

/ id/number/idobject/
/1/ 50 / 2 /
/2/ 60 / 2 /
/3/ 70 / 2 /
/4/ 80 / 1 /
/5/ 10 / 2 /
/6/ 20 / 1 /
/7/ 90 / 3 /

SQL

SELECT * 
FROM table 
WHERE number > 50 

結果,我想

/ id/number/idobject/
/7/ 90 / 3 /

餘萬T單獨至少有1 idobject真(> = 50),並沒有idobject假

+1

什麼構成真或假 – Mihai

+0

WHERE number <50 – raold

+1

向我們展示您所需的輸出表。你給的規則很混亂。 –

回答

3

如果我得到它,你想idojects至少有1 idobject真(> = 50),並沒有idobject假idobjects

SELECT MAX(id) as id ,MAX(number) as number,idobject 
FROM t 
GROUP BY idobject 
HAVING SUM(number <50)=0 
AND SUM(number >=50)>0 

編輯

,如果你有超過1個idobject真實的,你可以用GROUP_CONCAT

+2

不錯。我在上面,但你打了我。你的解決方案有效[SQLfiddle](http://sqlfiddle.com/#!9/960ef3/2) –

+1

是的,我想要這個,謝謝。 – raold

+0

由於樣本數據,您很幸運能夠獲得正確的結果。每個'idobject'你只會得到一行,你的'id'和'number'可能不會來自同一行。我想知道OP是否真的想要這樣的結果。 –

2

取代MAX你可以一個不使用IN子句。

select idobject from table where idobject not in(select idobject from table where number<50); 
+0

Isnt這比Mihai解決方案慢嗎? – raold

+1

它是。有一個子查詢涉及。現在Mihai已經解決了這個問題,我在這裏可以做的最好的方法是使用NOT EXISTS :-P –

+2

僅僅因爲您使用子查詢,您不能說它速度較慢。子查詢通常用於預過濾數據並提高性能。 –