Итак, вы превратили это в ...
SELECT xyz
, pqr
, (
SELECT (something)
FROM (
SELECT table_1.*
FROM table_1 WITH (NOLOCK)
WHERE (a lot of conditions and filtering follows)
) aa
WHERE aa.id1 = a.id1
AND aa.id2 = a.id2
...
)
INTO #temp_data
FROM (
SELECT table_1.*
FROM table_1 WITH (NOLOCK)
WHERE (a lot of conditions and filtering follows)
) a
inner JOIN table_2 b WITH (NOLOCK) ON a.xid = b.xid
Но вы должны продолжать идти. В этом случае коррелированный подзапрос не нужен. Это, кажется, не добавляет никакой ценности. Это делает запрос более сложным. Это также замедляет его, поскольку подзапрос должен выполняться один раз для каждой строки во внешнем запросе. Чтобы воспользоваться возможностью SQL Server объединять массивы данных в массовом порядке ...
SELECT xyz
, pqr
, aa.something
INTO #temp_data
FROM (
SELECT table_1.*
FROM table_1 WITH (NOLOCK)
WHERE (a lot of conditions and filtering follows)
) a
inner join (
SELECT table_1.*
FROM table_1 WITH (NOLOCK)
WHERE (a lot of conditions and filtering follows)
) aa on aa.id1 = a.id1
and aa.id2 = a.id2
...
inner JOIN table_2 b WITH (NOLOCK) ON a.xid = b.xid
Предполагая, что вы всегда соединяете table_1 с table_1, используя один и тот же столбец с обеих сторон объединения, как в вашемкод) вы можете упростить дальше. Будь осторожен здесь. Я предполагаю, что xid уникален или включен в соединение между a
и aa
. Если это не так, вам следует остановиться здесь.
Итак, если вы можете упростить дальнейшее, следующим шагом будет ...
SELECT xyz
, pqr
, a.something
INTO #temp_data
FROM (
SELECT table_1.*
FROM table_1 WITH (NOLOCK)
WHERE (a lot of conditions and filtering follows)
) a
inner JOIN table_2 b WITH (NOLOCK) ON a.xid = b.xid
... и его можно упроститьto ...
SELECT xyz
, pqr
, a.something
INTO #temp_data
FROM table_1 a WITH (NOLOCK)
inner JOIN table_2 b WITH (NOLOCK) ON a.xid = b.xid
WHERE (a lot of conditions and filtering follows)
Похоже, что сложностей, которые вы не разделяете, может быть значительно больше (три точки неопределенности).
WHERE aa.id1 = a.id1
AND aa.id2 = a.id2
...
Ваш пробег может отличаться.