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