为什么我的 PHP MYSQL 查询在我输入此查询后不起作用/运行?



我有两个表表一= 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 的配置文件并为筛选器创建索引。

在您的
  1. SELECT中,您有aNumber2,并且根据您的连接规则,表a和表b都有aNumber2列。 这是一个问题。 如果两个表具有同名的列,则应在选择时指定该表。 比如这样

    SELECT a.aNumber2 as a_number2,....

在查询中,其他列(如durationconcatDate(也存在相同的问题

  1. 另一件事是您应该在这种情况下使用INNER JOIN而不是LEFT JOIN

  2. 如果你的最终结果有很多行(数千行(,一步一步地走......将LIMIT添加到您的示例中,每次取 100 个结果。

最新更新