Mysql SQL-从外部表分配值
我有一个两列的表格,上面有客户ID和优惠券。我想通过将外部数据列表中的凭证分配给每个客户的ID来填写“优惠券”列。此外,一旦分配了代码,就不能再将其分配给其他客户 你能帮我写一个SQL查询吗Mysql SQL-从外部表分配值,mysql,sql,mysql-8.0,Mysql,Sql,Mysql 8.0,我有一个两列的表格,上面有客户ID和优惠券。我想通过将外部数据列表中的凭证分配给每个客户的ID来填写“优惠券”列。此外,一旦分配了代码,就不能再将其分配给其他客户 你能帮我写一个SQL查询吗 Table: | Customer ID | Coupon | | -------- | -------------- | | 100 | | | 200 | | | 300 | | Data list: | Voucher ID | Vo
Table:
| Customer ID | Coupon |
| -------- | -------------- |
| 100 | |
| 200 | |
| 300 | |
Data list:
| Voucher ID | Voucher |
| -------- | -------------- |
| 1 | j2h3h2 |
| 2 | hfd7s8 |
| 3 | fsdfs72 |
Final result
| Customer ID | Coupon |
| -------- | -------------- |
| 100 | j2h3h2 |
| 200 | hfd7s8 |
| 300 | fsdfs72 |
正如您所评论的,您正在使用MySQL 8,我将使用公共表表达式和
ROW\u NUMBER()
来创建顺序编号的行
然后,我可以将它们连接回正在更新的表,并相互连接,以便将新的凭证id分配给没有凭证id的客户
我还将使用术语凭单
,因为您似乎互换使用了凭单和优惠券
WITH
renumbered_customer AS
(
-- Find all rows in the customer table that do Not have an assigned voucher
-- Number those rows sequentially from 1 upwards
SELECT
*,
ROW_NUMBER() OVER (ORDER BY customer_id) AS row_id
FROM
customer
WHERE
voucher_id IS NULL
),
renumbered_voucher AS
(
-- Find all rows in the voucher table that have not bee assigned to a customer
-- Number those rows sequentially from 1 upwards
SELECT
*,
ROW_NUMBER() OVER (ORDER BY voucher_id) AS row_id
FROM
voucher
WHERE
NOT EXISTS (
SELECT *
FROM customer
WHERE customer.voucher_id = voucher.voucher_id
)
)
UPDATE
customer
INNER JOIN
renumbered_customer c
ON c.customer_id = customer.customer_id
INNER JOIN
renumbered_voucher v
ON c.row_id = v.row_id
SET
customer.voucher_id = v.voucher_id
;
工作演示:我们应该如何确定哪个优惠券分配给哪个客户?分配是否必须是确定性的(每次执行时都是一样的)?是否总是有足够的优惠券供每位客户购买一张优惠券?优惠券会比顾客多吗?为什么最终结果包含优惠券的字符串而不是其id?将哪个优惠券分配给哪个客户并不重要。优惠券对每位客户有效,但每位客户应收到一张单独的优惠券。应该只为那些尚未分配代码的客户进行分配,因此其ID的“优惠券”值为空。假设有足够的优惠券。现在没关系,我只是想测试一下机制。是的,优惠券总是比顾客多。包含客户的表每天都会更新,因此以前未分配的优惠券应分配给新客户。我们希望将优惠券的字符串发送给客户,这就是为什么我们使用它而不是ID。哪个数据库管理系统?它们之间的Syntac不同。(将光标悬停在
SQL
标签上以获取更多信息。)您的意思是-MySQL吗?非常感谢!我将测试它并让您知道它是否有效:)