我有两张桌子:
table_a
和table_b
。从尺寸来看,table_b
比table_a
大得多。
两个表中都存在字段(名称)。目标是找到出现在
count
中但 不出现在
table_a
中的名称(或使用 table_b
时的名称数量)以获得最大日期值。
我们使用您在下面的代码中看到的名称来比较它们。使用
LIKE CONCAT
作为 table_a
中的名称可以是子字符串。
SELECT count(DISTINCT "Name")
FROM table_a
WHERE table_a."Date Collected" = (
SELECT MAX("Date Collected")
FROM table_a
)
AND NOT EXISTS (
SELECT *
FROM table_b
WHERE UPPER(table_b."computer_name") LIKE CONCAT('%', UPPER(table_a."Name"), '%')
AND table_b."date_collected" = (
SELECT MAX("date_collected")
FROM table_b
)
)
此查询需要很长时间才能运行,并且值不匹配 - 这意味着我们没有获得准确的计数或列表。
无论如何,这可以变得更加高效和准确吗?
您是否尝试过从 table_a 左连接 table_b 开始? 您检查过是否真的需要使用 UPPER 吗? 感觉这可能会阻碍一些自动优化或索引/统计数据的使用。 你有大表上的索引/统计数据吗?