我有一个包含带if-else语句的游标的脚本,但是浏览表需要花费太多时间。 (一个79000行的表需要1h)。 所以我需要以基于集合的方法转换它。
if语句是
IF (
SELECT count (b.key)
FROM general..ean a,
general..mainframe b,
general..hope c
WHERE a.ean = @ean
AND a.c_suppression = '0'
AND a.key = b.key
AND b.key = c.key
AND c.canal = @canal
) = 0
其中@ean和@canal是使用游标在每行中检索的值。浏览的表是tmp_day_house_info_corporate。 所以我需要从tmp_day_house_info_corporate检索所有行,if语句中的@info和@canal检索0。
感谢您的帮助。
答案 0 :(得分:3)
Count
非常无效,not exists
IF NOT EXISTS (
SELECT *
FROM general..ean a,
general..mainframe b,
general..hope c
WHERE a.ean = @ean
AND a.c_suppression = '0'
AND a.key = b.key
AND b.key = c.key
AND c.canal = @canal
)
如果这是为了慢速显示您的完整查询,也许可以将其设置为基于。
答案 1 :(得分:3)
SELECT *
FROM tmp_day_house_info_corporate
WHERE not exists(
SELECT b.key
FROM general..ean a,
general..mainframe b,
general..hope c
WHERE a.ean = tmp_day_house_info_corporate.ean
AND a.c_suppression = '0'
AND a.key = b.key
AND b.key = c.key
AND c.canal = tmp_day_house_info_corporate.canal
)