查找与多个/各种其他列值

时间:2015-10-04 20:18:21

标签: mysql

我有一个积分表,其中重要的列是:

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查询。到目前为止我所尝试的可能是无关紧要的。

2 个答案:

答案 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 |
+----+--------+---------+