2014-10-07 38 views
1

我有一個查詢是這樣的:mysql - 想要在IN子查詢中使用LIMIT,如何解決?

SELECT order_number,dr_amount FROM data WHERE order_number IN (select order_number from data where dr_machine='KBA R-' && dr_code='Tryckning' && dr_amount IS NOT NULL && dr_amount!=0 group by order_number having count(*)<2) && dr_machine='KBA R-' && dr_code='Tryckning' && dr_date>='1381442400' && id>'397433' && order_number!='16952' ORDER BY id limit 1; 

的結果是這樣的:

+--------------+-----------+ 
| order_number | dr_amount | 
+--------------+-----------+ 
|  17047 | 1307  | 
+--------------+-----------+ 

這就是結果,我想進一步處理。 現在我想爲此添加一個子查詢。我需要檢查DATA WHERE oi_amount> 0中的order_number(17047)。 所以我儘量讓查詢此:

SELECT order_number,dr_amount FROM data WHERE order_number IN (select order_number from data where dr_machine='KBA R-' && dr_code='Tryckning' && dr_amount IS NOT NULL && dr_amount!=0 group by order_number having count(*)<2) && dr_machine='KBA R-' && dr_code='Tryckning' && dr_date>='1381442400' && id>'397433' && order_number!='16952' && order_number in (select order_number from data where oi_amount>0) ORDER BY id limit 1; 

但是,這給了我:

+--------------+-----------+ 
| order_number | dr_amount | 
+--------------+-----------+ 
|  17046 | 653  | 
+--------------+-----------+ 

而且這不是我想要的。我想返回沒有結果從該查詢,因爲order_number 17047有oi_amount < = 0(或NULL) 據我所知,當order_number 17047不匹配,然後跳到匹配的下一行,這是order_number 17046. 所以我想與限制1.添加一個子查詢像這樣:

SELECT order_number,dr_amount FROM data WHERE order_number IN (select order_number from data where dr_machine='KBA R-' && dr_code='Tryckning' && dr_amount IS NOT NULL && dr_amount!=0 group by order_number having count(*)<2) && order_number in (select order_number from data where dr_machine='KBA R-' && dr_code='Tryckning' && dr_date>='1381442400' && id>'397433' && order_number!='16952' ORDER BY id limit 1); 

但拋出的錯誤:

This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' 

我的表看起來像這樣:

+--------+--------------+-------------+------------+------------+-----------+-----------+ 
| id  | order_number | dr_worker | dr_code | dr_machine | dr_amount | oi_amount | 
+--------+--------------+-------------+------------+------------+-----------+-----------+ 
| 332144 |  16952 | NULL  | NULL  | NULL  | NULL  | 2000  | 
| 397432 |  16952 | Gustafsson, | Intag  | KBA R-  | 1   | NULL  | 
| 397433 |  16952 | Gustafsson, | Tryckning | KBA R-  | 1307  | NULL  | 
| 397434 |  17047 | Gustafsson, | Intag  | KBA R-  | 1   | NULL  | 
| 397435 |  17047 | Gustafsson, | Tryckning | KBA R-  | 1307  | NULL  | 
+--------+--------------+-------------+------------+------------+-----------+-----------+ 

正如你所看到的order_number 17047沒有記錄oi_amount,這就是爲什麼我想返回沒有結果/空結果。

我對如何使用JOIN知之甚少,但也許這就是要走的路?我試過索姆查詢,但我不知道這甚至會工作(我所有的問題與JOIN有一些語法錯誤,所以我放棄了)

問候 尼克拉斯

+0

我想問你在查詢那張表的內容?你想總結order_no的每一個dr_amount嗎?因爲答案很可能對你有所幫助,但是應該有一個更簡單的解決方案來解決你的問題 – Najzero 2014-10-07 11:30:19

+0

最後,我正在尋找dr_code = Tryckning && dr_machine = KBA R-的行,並且「dr_amount與下面的行/下一個」。但結果必須也有oi_amount> 0 – Niclas 2014-10-07 11:36:55

回答

1

嘗試使用join而不是:

SELECT order_number, dr_amount 
FROM data d join 
    (select order_number 
     from data 
     where dr_machine = 'KBA R-' and 
      dr_code = 'Tryckning' and 
      dr_amount IS NOT NULL and 
      dr_amount <> 0 
     group by order_number 
     having count(*) < 2 
    ) i 
    on d.order_number = i.order_number 
WHERE d.dr_machine = 'KBA R-' and 
     d.dr_code = 'Tryckning' and 
     d.dr_date >= '1381442400' and 
     d.id > '397433' and 
     d.order_number <> '16952' 
ORDER BY id 
limit 1; 

請注意,我改變了你的運營商,以符合SQL標準:<>代替!=and,而不是&&。另外,如果看起來像數字的常量確實是數字,則不需要單引號。