簡體   English   中英

跳過Mysql中的反向條目

[英]Skip reverse entry in Mysql

我有一個reports表,其中在產品銷售的情況下,我將row_type = 1設置row_type = 1 ,在取消的情況下,會創建一個新行,並且row_type = 2 ,因此要獲取任何row_type = 2記錄查詢都將是:

select * from table where row_type = 1;

Gives orders 1,2,3,4,5

select * from table where row_type = 2;

Gives orders 3,5

問題是,當我使用第一個查詢時,我有銷售記錄,但其中一些記錄也會被取消,並且將具有row_type = 2另一行,因此我想忽略此類記錄並獲取沒有任何反向輸入的行,是否可以在一個查詢中進行? 所以:

    select * from table where row_type = 1;

Gives orders 1,2,4 does not include 3,5

我可以用php代碼中的2個不同結果集進行處理,但是只是想知道一個查詢是否可以解決問題。

可能是帶有JOIN的子SELECT:

SELECT * FROM table 
LEFT JOIN (SELECT id FROM table WHERE row_type = 2) as cancels
ON table.id = cancels.id
WHERE table.row_type = 1 AND cancels.id IS NULL

想法是,子選擇的行為類似於查詢中的另一個表,您可以將其LEFT JOIN 然后通過使條件cancels.id is null ,從table中排除在subselect中具有條目的所有條目(包含所有已取消的條目)

假設:

  • id是銷售標識符,具有銷售項的條目與具有取消項的條目具有相同的id

如果表具有兩個表示相同順序的條目,則表示該順序被取消,因此您可以嘗試一下。

SELECT * , count(order_id) AS total FROM `table` 
GROUP BY order_id  HAVING total = 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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