Select
SQLITE:僅當列的所有值都相同時才選擇行ID
我有一張桌子,其中不止一行具有相同
ttid
的 . 我想ttid
根據狀態列獲取行是done
.tb tbid ttid status ----------------------------- 216 6 5 done 216 6 5 running 216 7 5 preparing 217 11 10 done 217 11 10 done 218 12 11 done 218 12 11 running 212 15 14 done 212 15 14 running 220 17 15 done 220 17 15 done
我只想有以下行:
tb tbid ttid status -------------------------------- 217 11 10 done 220 17 15 done
我嘗試了以下查詢,但它給出了錯誤的資訊
tb: 216
,因為兩個不同的tbid
.select tb,tbid,tbid,status FROM tt status in ('done')
您能否幫助如何獲得預期的結果。
編輯
我不應該得到 ttid 5 的結果,因為它的狀態為“準備中”。只有當所有狀態都“完成”時,我才應該得到 ttids 結果。
要僅獲得兩次完成且未找到其他狀態的狀態:
SELECT tb, tbid, ttid,status FROM test t1 WHERE status = 'done' AND NOT EXISTS(SELECT * FROM test t2 where t2.status != 'done' and t1.ttid = t2.ttid) GROUP BY tb,tbid,ttid,status HAVING COUNT(*) > 1;
或者
SELECT ttid,status FROM test t1 WHERE status = 'done' AND NOT EXISTS(SELECT * FROM test t2 where t2.status != 'done' and t1.ttid = t2.ttid) GROUP BY ttid,status HAVING COUNT(*) > 1;
通過或應用函式將其添加到組中的原因:
if
tb
ortbid
can be different for the same ‘done’status
and the samettid
,你選擇哪一個?你選擇最小的,最大的,…?如果這是真的並且沒有添加到
group by
or 函式中會發生什麼: