我有db表如下MySQL的:選擇列值不與這兩個可能的值1和-1重複
id | branch | allot
1 | Comp | -1
2 | IT | -1
3 | Comp | -1
1 | Comp | 1
其中allot=-1
意味着座椅配發及allot=1
意味着座位取消
我想一個MySQL查詢將返回id = 2,3
不是id = 1,因爲它稍後取消了座位。
我有db表如下MySQL的:選擇列值不與這兩個可能的值1和-1重複
id | branch | allot
1 | Comp | -1
2 | IT | -1
3 | Comp | -1
1 | Comp | 1
其中allot=-1
意味着座椅配發及allot=1
意味着座位取消
我想一個MySQL查詢將返回id = 2,3
不是id = 1,因爲它稍後取消了座位。
你的問題具體說「稍後」。這不能用你的數據格式完成,因爲SQL表代表無序集。而且,您沒有指定排序的列。
如果你想得到-1
的值,並排除那些1
,有幾種方法。一種是使用not exists
:
select t.*
from dbtable t
where allot = -1 and
not exists (select 1
from dbtable t2
where t2.id = t.id and t2.allot = 1
);
如果以後發現確實有記錄的排序(如createdat
)一列,那麼你可以很容易地修改此來:
select t.*
from dbtable t
where allot = -1 and
not exists (select 1
from dbtable t2
where t2.id = t.id and t2.allot = 1 and
t2.createdat > t.createdat
);
SELECT `id`, `branch`, MAX(`allot`)
FROM `table`
GROUP BY `id`
WHERE `allot` = -1
這樣,當同一座位上存在2行時,選擇其中allot
= 1(自MAX開始)的那一行,然後它最終從選擇(從WHERE開始)被刪除。
這個id分配爲-1(意思是座位是保留的),但是同一個id稍後分配爲1(意思是之前保留的座位現在被取消)現在不應該考慮。 –
那又如何?是的,這正是你用我建議的查詢得到的結果。更確切地說,從你最初的帖子中的例子中,你只會得到'id's 2和3。 – cFreed