有两张表如下: 表 A(仅列出部分数据作参考) order_id user id add_time 11701245001 10000 1498882474 11701245002 10001 1498882475 表B:(仅列出部分数据作参考) id order id goods id price 1 11701245001 1001 10 2 11701245001 1002 20 3 11701245002 1001 50 问:用 SQL 查询 购买过 goods id 为 1002 的用户 user id
时间: 2023-12-10 13:38:07 浏览: 63
可以使用如下 SQL 查询:
```
SELECT DISTINCT A.user_id
FROM A
INNER JOIN B
ON A.order_id = B.order_id
WHERE B.goods_id = 1002;
```
解释:
1. 使用 INNER JOIN 将表 A 和 B 进行关联,连接条件是 A 的 order_id 等于 B 的 order_id。
2. 在 WHERE 子句中筛选出购买过 goods_id 为 1002 的记录。
3. 使用 DISTINCT 关键字去重,得到购买过 goods id 为 1002 的用户 user id。
相关问题
如何检查两个订单ID,如果a表中的order_id存在,则使用它,否则使用order_no与b表中的order_id是否匹配?
要检查两个订单ID并在表A中查找是否存在,如果没有则通过order_no在表B中进行匹配,可以使用SQL查询来实现,假设我们有两个表,一个是`table_a`(包含`order_id`字段)另一个是`table_b`(包含`order_id`和`order_no`字段),可以编写如下的SQL脚本:
```sql
SELECT
COALESCE(a.order_id, b.order_id) AS matched_order_id
FROM
table_a a
LEFT JOIN
table_b b ON a.order_id = b.order_id
WHERE
a.order_id IS NOT NULL
UNION ALL
SELECT
order_no
FROM
table_b
WHERE
order_id IS NULL;
```
这个查询首先尝试从`table_a`中获取`order_id`,如果存在就选择,不存在时(即`order_id`在`table_a`中为NULL)再从`table_b`中通过`order_no`匹配`order_id`。
如何在MySQL中创建一个存储过程,以便根据订单编号(order_id)删除对应的表数据?
在MySQL中,你可以通过以下步骤创建一个存储过程来删除订单数据,假设你的数据库名为`your_database`,表名是`orders`:
1. 打开MySQL客户端并登录到相应的数据库。
```sql
USE your_database;
```
2. 创建一个存储过程,命名为`delete_order_data`,接收`order_id`作为输入参数。以下是存储过程的创建语句:
```sql
DELIMITER //
CREATE PROCEDURE delete_order_data(IN order_id INT)
BEGIN
DELETE FROM orders WHERE order_id = order_id;
END //
DELIMITER ;
```
在这个存储过程中,我们定义了一个名为`delete_order_data`的存储过程,它接受一个整数类型的参数`order_id`,然后在`orders`表中找到对应订单编号的行,并删除之。
3. 要执行此存储过程,只需调用它的名称并传入你要删除的订单ID:
```sql
CALL delete_order_data(YourOrderNumber);
```
将`YourOrderNumber`替换为你实际需要删除的订单ID。
阅读全文