我有两个表表一= 90K数据和表二= 100k数据,我将在给定条件的两个表上查找重复的数字,如果另一个表上有多个匹配,则匹配必须是1:1,只有一个将被标记为匹配(假设两个表上的数据都有匹配数据(。
我在下面有这个选择语句,但是当我在本地 xampp 甚至 CMD 上运行它时,按 Enter 后屏幕冻结,然后需要几个小时才能返回内存错误。希望你能帮到我。
SELECT rNum,
cDate,
cTime,
aNumber,
bNumber,
duration,
tag,
aNumber2,
bNumber2,
'hasMatch',
concatDate,
timeMinutes
FROM tableOne a
LEFT JOIN
tableTwo b ON a.aNumber2 = b.aNumber2
AND a.bNumber2 = b.bNumber2
WHERE a.hasMatch = 'valid'
AND (a.duration - b.duration) <= 3
AND (a.duration - b.duration) >= -3
AND TIMEDIFF(a.concatDate,b.concatDate) <= 3
AND TIMEDIFF(a.concatDate,b.concatDate) >= -3
提前谢谢你。
如果你正在与两个表建立 1:1 的关系,那么我认为你应该使用内部连接而不是左连接
其次,您的查询似乎没有正确索引。因此,最好使用解释选择...以查看 SQL 的配置文件并为筛选器创建索引。
SELECT
中,您有aNumber2
,并且根据您的连接规则,表a
和表b
都有aNumber2
列。 这是一个问题。 如果两个表具有同名的列,则应在选择时指定该表。 比如这样SELECT a.aNumber2 as a_number2,....
在查询中,其他列(如duration
和concatDate
(也存在相同的问题
另一件事是您应该在这种情况下使用
INNER JOIN
而不是LEFT JOIN
。如果你的最终结果有很多行(数千行(,一步一步地走......将
LIMIT
添加到您的示例中,每次取 100 个结果。