我有一个积分表,其中重要的列是:
id userid orderid
1 10 150
2 10 150
3 15 151
4 12 152
5 11 152
我需要查找具有多个/不同orderid
的所有userid
。结果将是:
id userid orderid
4 12 152
5 11 152
我可以在PHP中完成它,但我希望有人有时间帮助我进行mysql查询。到目前为止我所尝试的可能是无关紧要的。
答案 0 :(得分:1)
使用COUNT(DISTINCT)
和HAVING
查找包含多个不同用户ID的orderid。
<强> SqlFiddleDemo 强>
SELECT t.*
FROM tab t
JOIN (SELECT orderid, COUNT(DISTINCT userid)
FROM tab
GROUP BY orderId
HAVING COUNT(DISTINCT userid) > 1) AS sub
ON t.orderid = sub.orderid
ORDER BY t.id
答案 1 :(得分:1)
如果您只想获得具有相同orderid
但不同 userid
的行,请使用以下内容:
SELECT P1.* FROM points P1
INNER JOIN points P2
ON P1.orderid = P2.orderid and P1.id != P2.id and P1.userid != p2.userid;
请注意,第一个选择会返回您在问题中的期望:
+----+--------+---------+ | id | userid | orderid | +----+--------+---------+ | 4 | 12 | 152 | | 5 | 11 | 152 | +----+--------+---------+
现在,如果你想要返回任何相同的orderid
,无论userid
如何,请使用:
SELECT P1.* FROM points P1
INNER JOIN points P2
ON P1.orderid = P2.orderid and P1.id != P2.id;
在这种情况下,它不会排除具有相同ID的结果,返回
+----+--------+---------+ | id | userid | orderid | +----+--------+---------+ | 1 | 10 | 150 | | 2 | 10 | 150 | | 4 | 12 | 152 | | 5 | 11 | 152 | +----+--------+---------+