Я работаю над проектом, где мне нужно обновить несколько записей в одном столбце. Мои значения хранятся в списке, таком же, как ID, который я должен использовать в своем предложении WHERE. Мне было интересно, могу ли я использовать «IN» вместо «=» и обновлять все значения из моего списка? Вот мой код для списков:Могу ли я использовать 'in' для обновления поля вместо '=' в Oracle oracle?
<cfset listUserNum = ArrayToList(userNum)>
<cfset listUserCode = ArrayToList(userCode)>
Они выглядят так:
listUserNum = "72,15,71,27,16,14,22";
listUserCode = "B,B,C,T,R,M,Y";
Вот мое заявление обновление:
<cfquery name="UpdateUsers" datasource="test">
Update Users
Set UserCode in <cfqueryparam value="#listUserCode#" cfsqltype="cf_sql_varchar" list="yes" />
Where UserNumber in <cfqueryparam value="#listUserNum#" cfsqltype="cf_sql_integer" list="yes" />
</cfquery>
Я использовал 'IN' для моего ИНЕКЕ в прошлое, но я никогда не использовал его в своем SET. Дайте мне знать, если я делаю что-то неправильно здесь или если есть лучший способ сделать это. Я все еще не пробовал это, потому что мне нужно обновить около 20 тыс. Записей, и я хочу убедиться, что это лучший способ, прежде чем запускать мое обновление. Спасибо!
Нет - вы можете установить поле только на одно значение, поэтому 'in' не имеет смысла. Создайте временную таблицу (или статическую таблицу, если поиск редко изменяется) с двумя столбцами, а затем присоединитесь к этой таблице в обновлении. –
Я не могу использовать временные таблицы в своем проекте. Таким образом, я должен использовать списки и пытаться обновить мои записи таким образом. Какой будет другой вариант? Спасибо. –
Вы _could_ делаете массивный союз в подзапросе, чтобы создать квази-временную таблицу. –