交叉点两个选择

Gat*_*oyu 5 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   |
+----+-----------+-------+
Run Code Online (Sandbox Code Playgroud)

而且我需要得到'is_in'至少等于1的客户端数量,并且从未让'is_in'等于0(在这种情况下,一个是client_id 3).

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

SELECT client_id FROM foo WHERE is_in = 1;
Run Code Online (Sandbox Code Playgroud)

和

SELECT client_id FROM foo WHERE is_in = 0;
Run Code Online (Sandbox Code Playgroud)

我计划在它们之间进行INTERSECT,这样我就可以得到两个选项之间的公共条目,所以我只需要做"is_in = 1的客户端数量" - "计数(相交结果)".

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

谢谢.

Gia*_*rco 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)
Run Code Online (Sandbox Code Playgroud)

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

SELECT DISTINCT client_id FROM foo WHERE is_in = 1 AND client_id NOT IN (SELECT client_id FROM foo WHERE is_in = 0)
Run Code Online (Sandbox Code Playgroud)