Допустим, у меня есть запрос -
Create Temporary Table myparams AS (
SELECT 'xyz' AS Column1
);
SELECT * FROM MyTable x
JOIN myparams y ON x.Column1 = y.Column1
Это работает отлично. Однако, скажем, я делаю это:
Create Temporary Table myparams AS (
SELECT NULL AS Column1
);
Что я хочу сделать здесь, так это то, что когда в params
есть NULL
, я хочу вернуть все строки, когда присоединяюсь к MyTable
.
Примерно так:
SELECT * From MyTable x
IF(myparams.Column1 IS NULL, LEFT JOIN myparams.Column1 = x.Column1,
INNER JOIN myparams.Column1 = x.Column1)
Я спрашиваю об этом, так как у меня есть хранимая процедура, которая принимает параметры, которые могут иметь значение или NULL
, и я не хочу использовать find_in_set
, поскольку он оценивает строку за строкой, которая неэффективна при работе с огромным количеством данные.
Редактирование вопроса, так как мне не было понятно о таблице params
. Входные параметры могут быть разделены запятыми. Таким образом, для параметра нет единственного значения.
Для бывших -
Input params - `000-0000`, 1111-2222`
So currently I do this:
SELECT * FROM MyTable
find_in_set(MyTable.Column1, InputParams)
Это оценивает каждую строку, что очень неэффективно для строк 25 М.
Я скорее думал создать временную таблицу со всеми входными параметрами, а затем присоединиться к MyTable