MySQL交叉选择限制问题

标签 mysql sql

我有两张 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

您在 t1t2 中的 x 列上是否已有索引,好像这样有助于提高查询速度。我建议不要在生产环境中运行此查询。如果不可避免,我建议包括 LIMIT 10 (或您需要的任意行数)以限制影响。

关于MySQL交叉选择限制问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9405471/

相关文章:

php - 获取拖放值以保存在mysql数据库中

sql - SQL Server 2008 中的本月至今

sql - Postgres,将时间戳更新为当前日期但保留一天中的时间

python - 从 MySQL 快速更新 Cassandra

mysql - nodejs连接到mysql数据库 "INSERT command denied to user"

MYSQL like查询在explain中不显示全表扫描

mysql - 通过一个查询计算超过一次和两次的行数

php - 你如何 ORDER BY 两个表?

php - MySQL & PHP - 选择 6 行,每行有不同的 'WHERE' 子句

php - 出现错误 '#1111 - Invalid use of group function'