跳过Mysql

时间:2017-08-02 20:02:08

标签: mysql

我有一个报告表,在产品销售的情况下,我设置了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个不同的结果集来解决这个问题,但只是想知道一个查询是否可以解决这个问题....!

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