簡體   English   中英

mysql嵌套查詢不適用於AND條件

[英]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:

  • 編號:pk
  • shop_id:可為空的fk
  • ...其他與此處無關的字段

ek_order_has_order_status:

  • id:pk(我注意到這不是必需的,但是為時已晚...)
  • order_id:fk
  • order_status_id:fk
  • 日期:datetime
  • ...其他與此處無關的字段

ek_order_status:

  • 編號:pk
  • 代碼:str
  • ...其他與此處無關的字段

數據

ek_order_has_order_status表的行如下所示:

  • 編號:182
  • order_id:283,
  • order_status_id:7(這是ek_order_status的“ preparing_order”代碼)

在ek_order表中,我們可以發現shop_id的確是1:

  • id:283
  • 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM