【发布时间】:2016-01-16 16:54:09
【问题描述】:
我们需要从下表mytable 中选择所有segments_id 为5 或8 但不是1 或7 的segments_id, em_id。为了在下面的cmets 之后更清楚,结果将是一个集合,其中包括segments_id, em_id 的所有行,其中 em_id 的 segments_id 为 5 或 8,但不是 1 或 7。
+-------------+-------+
| segments_id | em_id |
+-------------+-------+
| 1 | 8 |
| 1 | 17 |
| 5 | 2 |
| 5 | 4 |
| 5 | 5 |
| 5 | 16 |
| 5 | 17 |
| 7 | 4 |
| 7 | 5 |
| 7 | 8 |
| 7 | 16 |
| 8 | 4 |
| 8 | 6 |
| 8 | 8 |
| 8 | 18 |
| 18 | 6 |
| 18 | 99 |
+-------------+-------+
结果应该是:
+-------------+-------+
| segments_id | em_id |
+-------------+-------+
| 5 | 2 |
| 8 | 6 |
| 8 | 16 |
+-------------+-------+
我们需要避免使用IN 子句,因为它可以扩展到数百万行。
我知道这将涉及连接自身和/或子查询,但我没有看到它。我看到了这个帖子Stackoverflow: Selecting rows from a table that have the same value for one field,但看不到解决方案。
【问题讨论】:
-
为什么你认为
in不能扩展到一百万行? -
是否还有其他规则说明为什么某些记录会被丢弃,例如
(8, 4)?没关系。我认为您的预期输出是(令人困惑的)缩写。 -
嗨,Ed,事实是我不知道,根据经验,但我在这里看到了一些强烈的意见How many values in an “in” clause is too many in a SQL query?
标签: mysql