mysql 主表查询,子表没有数据,状态未读,子表有数据,状态已读
时间: 2024-02-23 10:02:32 浏览: 66
假设有两张表,一张是 `orders` 表,存储订单信息,包括订单编号、订单金额等字段;另一张是 `order_items` 表,存储订单商品信息,包括订单编号、商品编号、商品名称等字段。现在需要查询每个订单的状态,如果该订单还没有被下单,则状态为 "未下单",否则状态为 "已下单"。
可以使用 `NOT EXISTS` 和 `CASE WHEN` 语句实现:
```
SELECT order_id, order_amount,
CASE WHEN NOT EXISTS (SELECT 1 FROM order_items WHERE order_items.order_id = orders.order_id)
THEN '未下单' ELSE '已下单' END AS order_status
FROM orders;
```
上面的查询中,使用了 `NOT EXISTS` 判断 `order_items` 表中是否存在该订单的商品记录,如果不存在则表示该订单未下单,否则表示该订单已下单。然后使用 `CASE WHEN` 语句根据判断结果来计算订单状态。最后使用 `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`,方便后面使用。
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`,方便后面使用。
阅读全文