[英]mysql nested query not working with an AND condition
我不明白這一點:以下兩個查詢幾乎相同,唯一不同的是“和o.shop_id = 1”部分,但它們沒有產生預期的結果。
第一個查詢:
select count(*) as count
from ek_order o
where 1
and
(
select
s.code
from ek_order_status s
inner join ek_order_has_order_status h on h.order_status_id=s.id
where o.id=h.order_id
order by h.date DESC
limit 0,1
) in ('preparing_order')
查詢結果:1
第二個查詢:
select count(*) as count
from ek_order o
where 1
and o.shop_id=1
and
(
select
s.code
from ek_order_status s
inner join ek_order_has_order_status h on h.order_status_id=s.id
where o.id=h.order_id
order by h.date DESC
limit 0,1
) in ('preparing_order')
查詢結果:0( 我預期為1! )
我的架構結構如下所示:
ek_order_has_order_status表的行如下所示:
在ek_order表中,我們可以發現shop_id的確是1:
因此,我不明白的是為什么第二個查詢返回0而不是1。我分開測試了查詢的所有位,它們似乎都起作用(我先測試了內部查詢,然后測試了外部查詢,都成功了),但是然后,添加“和o.shop_id = 1”部分會使整個查詢失敗。
有人知道為什么嗎? 和/或有修復。 (我可以求助於兩個查詢,但是為了提高我的sql知識,我希望理解其底部)。
附:基本上,我在知道一個訂單可以有多個狀態的情況下,嘗試獲取包含“ preparing_order”狀態作為其最終/最新狀態的訂單數量。
在第二個查詢中:
SELECT COUNT(*) as count
FROM ek_order o
WHERE 1
AND o.shop_id=1
...
您要對整個ek_order
表進行計數,因此,為單個記錄講shop_id
值甚至都沒有意義。 我懷疑您打算做的是,如果找到任何具有shop_id
值為1的記錄,則該記錄作為邏輯true傳遞。 如果是這樣,則可以使用EXISTS
:
SELECT COUNT(*) as count
FROM ek_order o
WHERE 1
AND EXISTS (SELECT 1 FROM ek_order WHERE shop_id=1)
AND ...
如果這不起作用,那么另一種選擇是采用shop_id
的最大值:
SELECT COUNT(*) as count
FROM ek_order o
WHERE 1
AND MAX(shop_id) = 1
AND ...
如果您確定該表只有一條記錄,並且只想將其值與計數內聯,則這將很有意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.