mysql 一张表查询,根据另一张表数据决定状态
时间: 2023-07-08 11:19:57 浏览: 141
假设有两张表,一张是 `orders` 表,存储订单信息,包括订单编号、订单金额等字段;另一张是 `payments` 表,存储订单的支付信息,包括订单编号、支付时间等字段。现在需要查询每个订单的状态,如果该订单已支付,则状态为 "已支付",否则状态为 "未支付"。
可以使用 `LEFT JOIN` 和 `CASE WHEN` 语句实现:
```
SELECT o.order_id, o.order_amount,
CASE WHEN p.payment_time IS NOT NULL THEN '已支付' ELSE '未支付' END AS order_status
FROM orders o
LEFT JOIN payments p ON o.order_id = p.order_id;
```
上面的查询中,使用了 `LEFT JOIN` 将两个表连接起来,以 `orders` 表为主表,`payments` 表为从表。然后使用 `CASE WHEN` 语句根据支付时间是否为 NULL 来判断订单状态,如果支付时间不为 NULL,则表示该订单已支付,否则表示该订单未支付。最后使用 `AS` 关键字给计算出来的状态字段起一个别名 `order_status`,方便后面使用。
相关问题
mysql 一张表查询,根据另一张表是否存在子数据决定状态
假设有两张表,一张是 `orders` 表,存储订单信息,包括订单编号、订单金额等字段;另一张是 `order_items` 表,存储订单商品信息,包括订单编号、商品编号、商品名称等字段。现在需要查询每个订单的状态,如果该订单存在商品信息,则状态为 "已下单",否则状态为 "未下单"。
可以使用 `LEFT JOIN` 和 `CASE WHEN` 语句实现:
```
SELECT o.order_id, o.order_amount,
CASE WHEN oi.order_id IS NOT NULL THEN '已下单' ELSE '未下单' END AS order_status
FROM orders o
LEFT JOIN order_items oi ON o.order_id = oi.order_id;
```
上面的查询中,使用了 `LEFT JOIN` 将两个表连接起来,以 `orders` 表为主表,`order_items` 表为从表。然后使用 `CASE WHEN` 语句根据 `order_items` 表中是否存在该订单的商品来判断订单状态,如果存在则表示该订单已下单,否则表示该订单未下单。最后使用 `AS` 关键字给计算出来的状态字段起一个别名 `order_status`,方便后面使用。
mysql 一张表查询,子表没有数据,状态未读,子表有数据,状态已读
假设有两张表,一张是 `articles` 表,存储文章信息,包括文章编号、文章标题等字段;另一张是 `article_readers` 表,存储文章的阅读信息,包括文章编号、阅读者编号等字段。现在需要查询每篇文章的状态,如果该文章还没有被阅读,则状态为 "未读",否则状态为 "已读"。
可以使用 `LEFT JOIN` 和 `CASE WHEN` 语句实现:
```
SELECT a.article_id, a.article_title,
CASE WHEN ar.reader_id IS NOT NULL THEN '已读' ELSE '未读' END AS article_status
FROM articles a
LEFT JOIN article_readers ar ON a.article_id = ar.article_id;
```
上面的查询中,使用了 `LEFT JOIN` 将两个表连接起来,以 `articles` 表为主表,`article_readers` 表为从表。然后使用 `CASE WHEN` 语句根据 `article_readers` 表中是否存在该文章的阅读记录来判断文章状态,如果存在则表示该文章已读,否则表示该文章未读。最后使用 `AS` 关键字给计算出来的状态字段起一个别名 `article_status`,方便后面使用。
阅读全文