交叉点两个选择

时间:2015-12-14 18:45:43

标签: mysql select intersect

我有这张桌子:

+----+-----------+-------+
| id | client_id | is_in |
+----+-----------+-------+
| 1  |     1     |   0   |
+----+-----------+-------+
| 2  |     2     |   0   |
+----+-----------+-------+
| 3  |     1     |   1   |
+----+-----------+-------+
| 4  |     2     |   1   |
+----+-----------+-------+
| 5  |     3     |   1   |
+----+-----------+-------+
| 6  |     3     |   1   |
+----+-----------+-------+
| 7  |     1     |   0   |
+----+-----------+-------+
| 8  |     4     |   0   |
+----+-----------+-------+
| 9  |     4     |   0   |
+----+-----------+-------+

我需要获得'is_in'至少等于1的客户端数量,并且从未将'is_in'等于0(在本例中为client_id 3)。

为此,我提出了两个问题:

SELECT client_id FROM foo WHERE is_in = 1;

SELECT client_id FROM foo WHERE is_in = 0;

我计划到他们之间的INTERSECT,这样我就可以得到两个选项之间的公共条目,所以我只需要做“is_in = 1的客户端数” - “count(相交结果)”

但是INTERSECT不能和MYSQL一起使用,有没有替代INTERSECT在这种情况下工作或者更简单的方式来获得我需要的东西(我觉得我做的很复杂)。

谢谢。

2 个答案:

答案 0 :(得分:1)

SELECT id, client_id FROM foo WHERE is_in = 1 AND client_id NOT IN (SELECT client_id FROM foo WHERE is_in = 0)

或者,如果您只需要客户编号:

SELECT DISTINCT client_id FROM foo WHERE is_in = 1 AND client_id NOT IN (SELECT client_id FROM foo WHERE is_in = 0)

答案 1 :(得分:0)

你可以如此总结它们并得到最小的值,按客户机ID分组,并将结果排除在任何零点之外。试试这个:

MonadFix