Mysql通过不同的行检查组合

时间:2017-09-23 09:55:56

标签: mysql exists

所以我有下面的表和php中的一个变量具有这些值:14,16

combo table

如何检查表中是否存在上述数字组合?上面的组合存在id 3.我不想检查数字的顺序(例如“16,14”或“14,16”)

我希望你不要混淆!

1 个答案:

答案 0 :(得分:2)

您需要GROUP BY COUNTHAVING

SELECT id
FROM tablename
WHERE optid IN(14, 16)
GROUP BY id
HAVING COUNT(DISTINCT optid) = 2;
  • WHERE optid IN(14, 16)将确保ID具有这些数字。
  • COUNT DISTINCT会删除所有ID,只需要有两个optid

demo

结果:

| id |
|----|
|  3 |
|  4 |

请注意:此查询会为您提供至少id的那些14 and 16。所以它会给你3和4。

但是如果你想要那些正好有14和16而且没有更多的东西,那么试试这个:

SELECT id
FROM tablename
WHERE optid IN(14, 16)
  AND id not in (SELECT id from tablename where optid not in(14,16))
GROUP BY id
HAVING COUNT(DISTINCT optid) = 2;

这会给你:

| id |
|----|
|  3 |

Demo