sqlserver:编写逻辑的更好方法

fkaflof6  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(303)

请建议一个更好的方式(性能)写下面的逻辑。假设我有大约5个类似的查询,其中位置id必须为不同的区域提取,并存储在不同的列中,以便进行进一步的逻辑。

SELECT
    @location1 = locid
FROM
    table1 t1
    JOIN table2 t2 ON t1.key1 = t2.key2 and t1.flag = 1
WHERE
    t1.area = 'ABC'
SELECT
    @location2 = locid
FROM
    table1 t1
    JOIN table2 t2 ON t1.key1 = t2.key2 and t1.flag = 1
WHERE
    t1.area = 'DEF'
t5zmwmid

t5zmwmid1#

一种方法是使用条件聚合来填充变量—但是,请注意,这(公平地说,也是问题中的查询)假设每个变量 t1.area 结果集中只有一条记录。

SELECT @location1 = MAX(CASE WHEN t1.area = 'ABC' THEN locid END)
      ,@location2 = MAX(CASE WHEN t1.area = 'DEF' THEN locid END)
FROM
    table1 t1
    JOIN table2 t2 ON t1.key1 = t2.key2 and t1.flag = 1
WHERE
    t1.area IN('ABC', 'DEF')
62o28rlo

62o28rlo2#

您可以在一个查询中传递area的所有有效值,然后将数据存储在一个表变量中。
可以使用该表变量进一步读取数据,因为现在只需查询有限的数据集即可获得记录。

DECLARE @AreaLocationTable     AS TABLE([Location] NVARCHAR(100),Area NVARCHAR(100))
INSERT INTO @AreaLocationTable
SELECT
    t1.locid,
        t1.Area
FROM
    table1 t1
    JOIN table2 t2 ON t1.key1 = t2.key2 and t1.flag = 1
WHERE
    t1.area in ('ABC','DEF')

相关问题