gpt4 book ai didi

mysql - 有没有办法在一个查询中回答这个问题?

转载 作者:行者123 更新时间:2023-12-01 00:31:21 25 4
gpt4 key购买 nike

我有一个包含 3 个表的 MySQL 数据库:

我。 (身份证、姓名、购买)
二。 购买(id, product, date_purchased)
三、 目录(id、产品、单位成本)

Person.purchases 持有 Purchase.id。也就是说,每当有人购买东西时,订单 ID 都会记录在 Person.purchases 中。例如。 Person.purchases 中存储了 1, 300, 292。

每个Purchase 条目都记录了购买的任何元素的实例。因此,Purchase.id = 300 可能是“foo”。

Catalog 包含关于“foo”的描述。

我想知道的是如何回答:“谁买了“foo”?我知道如何分两步回答这个问题:

第 1 步:SELECT Purchases.id FROM Purchases INNER JOIN Catalog WHERE Purchases.product = Catalog.product;

我会将步骤 1 的结果存储在变量 tmp 中;

第 2 步: SELECT name FROM Person WHERE Person.orders LIKE "%tmp%";

我在上面使用 LIKE,因为 Person.orders 存储了多个 Purchase.id。

有没有办法将这两个合并为一个查询?

最佳答案

问题可以用一个查询来回答:

使用 EXISTS

SELECT a.name
FROM PERSON a
WHERE EXISTS(SELECT NULL
FROM PURCHASE b
JOIN CATALOG c ON c.product = b.product
WHERE FIND_IN_SET(b.id, a.purchases) > 0
AND c.product = 'foo')

使用连接:

这需要 DISTINCT(或 GROUP BY),因为如果一个人/客户多次购买“foo”,则可能出现重复。

SELECT DISTINCT a.name
FROM PERSON a
JOIN PURCHASE b ON FIND_IN_SET(b.id, a.purchases) > 0
JOIN CATALOG c ON c.product = b.product
WHERE c.product = 'foo'

附录

我同意其他答案,即数据模型很差 - PURCHASE 表中应该有一个人/客户 ID,而不是 PERSON 表。但这并没有彻底改变事情。

关于mysql - 有没有办法在一个查询中回答这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5527695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com