MySQL查询CASE或JOIN或UNION - 要使用哪个?

时间:2016-01-05 13:28:04

标签: php mysql join case union

我有订单和子订单表。并查看包含产品行的内容。我希望SELECT所有行都有status = 2,但如果两者(子订单和主要订单)都有status = 2,我希望代替订购ID,主要订单的ID。< / p>

这是我的表格的例子:

| id     | suborder | mainorder | status |
|--------|----------|-----------|--------|
| 000001 |   (NULL) |    (NULL) |      3 |
| 000002 |   (NULL) |    (NULL) |      2 |
| 000003 |        1 |    000001 |      2 |
| 000004 |        1 |    000002 |      2 |

所以查询结果将是:

| id     | suborder | mainorder | status |
|--------|----------|-----------|--------|
| 000002 |   (NULL) |    (NULL) |      2 |
| 000003 |        1 |    000001 |      2 |
| 000002 |        1 |    000002 |      2 | 

所以最后一个id更改了mainorder的原因是status = 2。订单ID 000003无法更改,因为订单000001还没有status = 2

我尝试了此查询,但我不知道如何包含状态..

SELECT
    CASE
WHEN mainorder IS NULL THEN
    id
WHEN mainorder IS NOT NULL THEN
    mainorder
END AS final_id,
 orders.*
FROM
    orders
WHERE
    `status` = 2
GROUP BY
    id

提前致谢。

1 个答案:

答案 0 :(得分:2)

您可以通过各种方式执行此操作。以下使用join仅匹配满足状态条件的主要订单ID:

select coalesce(om.id, o.id) as id
       o.suborder, o.mainorder, o.status
from orders o left join
     orders om
     on o.mainorder = om.id and om.status = 2
where status = 2;

如果匹配,则使用主订单ID。否则,请使用原始ID。