我有兩張桌子:
- 錢包
- 動作
關系是 wallet.id = movements.wallet_id
我想檢查是否有任何錢包進行了某種型別的移動
我所做的是:
SELECT w.*,
CASE WHEN (
SELECT COUNT(m.id)
FROM movements m
WHERE m.wallet_id = w.id
AND m.type = 'BUY'
)>0 THEN TRUE ELSE FALSE END AS has_buy_movement,
CASE WHEN (
SELECT COUNT(m.id)
FROM movements m
WHERE m.wallet_id = w.id
AND m.type = 'SELL'
)>0 THEN TRUE ELSE FALSE END AS has_sell_movement
FROM wallet w
通過這種方式,我得到了我想要的,但我的問題是我的查詢非常“繁重”,因為移動可能有數千次。所以對我來說可以在找到一行后打破它。
如果我將 LIMIT 1 放在子查詢的末尾,它并沒有真正改變,因為在 COUNT 中我仍然得到總數。
有替代方法嗎?
謝謝
uj5u.com熱心網友回復:
EXISTS一旦找到匹配項,使用which 回傳:
SELECT w.*,
EXISTS (SELECT 1 FROM movements m WHERE m.wallet_id = w.id AND m.type = 'BUY') AS has_buy_movement,
EXISTS (SELECT 1 FROM movements m WHERE m.wallet_id = w.id AND m.type = 'SELL') AS has_sell_movement
FROM wallet w;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/535368.html
標籤:数据库子查询存在
