如何比较并获取两个SQL表之间的剩余对象?

问题描述 投票:0回答:1

我有两张桌子:

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
            )
    )

此查询需要很长时间才能运行,并且值不匹配 - 这意味着我们没有获得准确的计数或列表。

无论如何,这可以变得更加高效和准确吗?

sql postgresql query-optimization
1个回答
0
投票

您是否尝试过从 table_a 左连接 table_b 开始? 您检查过是否真的需要使用 UPPER 吗? 感觉这可能会阻碍一些自动优化或索引/统计数据的使用。 你有大表上的索引/统计数据吗?

© www.soinside.com 2019 - 2024. All rights reserved.