我有一个报告表,在产品销售的情况下,我设置了row_type = 1
,如果取消,则会创建一个新行并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
所以我想忽略这些记录并获取不在的行# 39; t有任何反向条目,这可能在一个查询中?所以:
select * from table where row_type = 1;
Gives orders 1,2,4 does not include 3,5
我可以在php代码中使用2个不同的结果集来解决这个问题,但只是想知道一个查询是否可以解决这个问题....!
答案 0 :(得分:0)
可能是带有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
这个想法是,subselect就像查询中的另一个表一样LEFT JOIN
。然后通过条件cancels.id is null
,排除table
中在子选择中包含条目的所有条目(包含所有已取消的条目)
这假定:
id
是销售标识符,销售条目与取消条目具有相同的id
答案 1 :(得分:0)
如果表中有两个相同订单的条目,则该订单被取消 所以你可以尝试一下。
SELECT * , count(order_id) AS total FROM `table`
GROUP BY order_id HAVING total = 1