我有两张 table 。
T1 有一个列,其中有 9000 条唯一记录 (varchar)。
T2 有许多列,记录数超过 100 万条。 T2 的其中一列 T2.x
包含来自 T1 列 T1.x
的数据,但某些 T2 记录在其列 T2.x
中包含数据T1 的列 T1.x
中不存在的数据。 T2.x
也可以为 NULL。
我想列出T2的所有记录,其中T2.x有一条与T1.x匹配的记录
I tried = SELECT t1.column_x, t2.* from t1, t2 WHERE x = t1.x
但是,这仅列出了 9000 条记录,忽略了 T2 中存在的许多其他记录。
我怎样才能实现我所追求的目标?
e.g.
**t1 [x]
===**
a
b
c
**t2
===** [x]
1 .. .. .. a
2 .. .. .. b
3 .. .. .. eee
4 .. .. .. NULL
5 .. .. .. c
6 .. .. .. a
7 .. .. .. c
我想要得到:1-2-5-6-7
谢谢。
最佳答案
很简单,下面的方法可以工作,但考虑到 x
列都是 VARCHAR,它会导致该大小的表出现性能问题。
SELECT
t2.*
FROM t2
INNER JOIN t1
ON t1.x = t2.x
您在 t1
和 t2
中的 x
列上是否已有索引,好像这样有助于提高查询速度。我建议不要在生产环境中运行此查询。如果不可避免,我建议包括 LIMIT 10
(或您需要的任意行数)以限制影响。
关于MySQL交叉选择限制问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9405471/