gpt4 book ai didi

mysql - 使用 MySQL 将 2 列子查询转换为 1 列子查询

转载 作者:行者123 更新时间:2023-11-29 06:59:55 25 4
gpt4 key购买 nike

我在执行特定查询时遇到了一些问题。假设您有一个像 eBay 这样的网站,并且您想要选择销售至少 2 件元素但属于不同类型(衣服、电子产品等)的用户

这是我想到的:

Select name, count(id_object) from user u,advert a where u.id_user=a.id_seller and 
a.id_buyer IS NOT NULL and
id_object in (select o1.id_object, o2.id_object from object o1, object o2
where o1.id_object != o2.id_object and o1.type_object != o2.type_object)
group by name
having count(id_object)>1

问题出现在这里:

id_object in (select o1.id_object, o2.id_object from object o1, object o2
where o1.id_object != o2.id_object and o1.type_object != o2.type_object)

这不起作用因为我从子选择中提取了 2 列,而 id_object 只有一列。

我的第二次尝试涉及分离对象 1 和对象 2,但由于它们需要不同,所以添加的“in”不会返回任何内容。

我的第三次尝试是将对象 1 和对象 2 的结果合并起来,但我无法限制对象 1 必须与对象 2 不同这一事实。

如果有帮助,这里是表格的简化架构:

Object (id_object, type_object)
Advert (id_seller, id_buyer, id_object)
User (id_user, name)

我也在 stackoverflow 上搜索了类似的问题,但没有成功: MySQL: Using "In" with Multiple SubQueries? MySQL: Returning multiple columns from an in-line subquery

最佳答案

我会这样做:

select a.id_user
from advert a join
object o
on a.id_object = o.id_object
group by a.id_user
having count(distinct o.type_object) > 1;

因为一个对象只能有一种类型,所以这满足标准。您还可以添加 and count(distinct o.id_object) > 1,但这将是多余的。

如果您想要更多用户信息,则可以加入该表,或使用 in,或使用 exists

关于mysql - 使用 MySQL 将 2 列子查询转换为 1 列子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43856759/

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