使用MySQL

时间:2017-05-08 20:29:36

标签: mysql sql subquery

我对特定查询有点麻烦。假设您有一个像易趣这样的网站,并且您想要选择销售至少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只有一列。

我的第二次尝试涉及分离object1和object 2,但由于它们需要不同,所以添加的" in"没有回报。

我的第三次尝试是UNION来自对象1和对象2的结果,但是我无法限制object1必须与objet2不同的事实。

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

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

2 个答案:

答案 0 :(得分:1)

尝试这样的事情。

编辑:该死的忘了这个类型的东西,试试以下。 编辑2:我们不希望相同类型的对象,但不同。请再试一次,慢慢变丑。 编辑3:固定次数

Select * from user where id_user in (
    Select c.id_seller from (
        Select a.id_seller as id_seller, 
               o.object_type as oject_type,
               count(*) as numOccurrences
        from adverts a, object o 
    where o.id_object=a.id_object 
    group by a.id_seller having count(*) > 1) c 
where c.numOccurrences > 1);

答案 1 :(得分:1)

我会这样做:

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