我有两个表 tableOne = 90K 数据和 tableTwo = 100k 数据,我会在给定条件下查找两个表上的重复数字,匹配必须是 1:1 如果在另一个表上有多个匹配,则只有一个匹配将被标记为匹配(假设两个表上的数据都匹配数据)。
我在下面有这个选择语句,但是当我在我的本地xampp上运行它甚至在CMD上时,我按下回车后屏幕会冻结,然后它需要几个小时才会返回内存错误。希望你能帮助我。
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
提前谢谢你。
答案 0 :(得分:0)
如果你与两张桌子做1:1的关系,那么我认为你应该选择INNER JOIN而不是LEFT JOIN
其次,您的查询似乎没有正确编入索引。因此,最好使用EXPLAIN SELECT ...来查看SQL的配置文件并为Filters创建INDEXES。
答案 1 :(得分:0)
在"new hello"
SELECT
aNumber2
中,根据您的加入规则,表格a
和表格b
都有aNumber2
列。这是一个问题。如果两个表具有相同名称的列,则在选择时应指定该表。
例如像这样
SELECT a.aNumber2 as a_number2,....
在您的查询中,duration
和concatDate
另一件事是你应该在你的情况下使用INNER JOIN
而不是LEFT JOIN
。
如果您的最终结果有多行(数千),请逐步执行...将LIMIT
添加到您的示例中,每次都获得100个结果。