В моем текущем проекте есть запрос, где задан набор параметров, и мне нужно проверить эти параметры на другую таблицу. Каждый из этих параметров может быть NULL и в этом случае должен быть проигнорирован. То, что я в настоящее время сделать следующее:Таблица параметров и условия
SELECT t.col1,
t.col2,
t.col3,
t.col4,
t.col5,
t.col6,
t.col7,
t.col8
FROM table1 t
INNER JOIN #parameters p ON (p.col1 IS NULL OR p.col1 = t.col1)
AND (p.col2 IS NULL OR p.col2 = t.col2)
AND (p.col3 IS NULL OR p.col3 = t.col3)
AND (p.col4 IS NULL OR p.col4 = t.col4)
AND (p.col5 IS NULL OR p.col5 = t.col5)
AND (p.col6 IS NULL OR p.col6 = t.col6)
AND (p.col7 IS NULL OR b.col7 >= t.col7)
AND (p.col8 IS NULL OR b.col8 <= t.col8)
Это означает, что если столбец в таблице параметров NULL он будет игнорироваться в противном случае он будет по сравнению с соответствующим столбцом в table1. Это работает, но, к сожалению, ОЧЕНЬ медленно. Кто-нибудь знает лучшее решение (другое, а затем конкатенирование строкового запроса)?
Почему это медленно: что говорит план запроса о том, что занимает время? – Richard
let try: select * from table1 t join #parameter on (p.col1 = t.col1) union select * from table1 t join #parameter on (p.col1 is null) –
Имеет ли '# parameters' одну строку или может ли он содержать несколько строк? – Tanner