Обновление: Этот ответ касается общей классификации ошибок. Для более определенного ответа о том, как лучше всего обработать точный запрос OP, см. другие ответы на этот вопрос
MySQL In, Вы не можете изменить ту же таблицу, которую Вы используете в ИЗБРАННОЙ части.
Это поведение документируется в: http://dev.mysql.com/doc/refman/5.6/en/update.html
, Возможно, можно просто соединить таблицу с собой
, Если логика достаточно проста изменить запрос, потерять подзапрос и соединить таблицу с собой, используя соответствующие критерии выбора. Это заставит MySQL рассматривать таблицу как две разных вещи, позволяя разрушительным изменениям идти вперед.
UPDATE tbl AS a
INNER JOIN tbl AS b ON ....
SET a.col = b.col
, С другой стороны, вложение попытки подзапрос глубже в из пункта...
при абсолютной необходимости в подзапросе существует обходное решение, но это ужасно по нескольким причинам, включая производительность:
UPDATE tbl SET col = (
SELECT ... FROM (SELECT.... FROM) AS x);
вложенный подзапрос в ИЗ пункта создает неявная временная таблица , таким образом, это не рассчитывает как та же таблица, Вы обновляете.
..., но не упускают оптимизатор запросов
, Однако остерегаются этого от MySQL 5.7.6 и вперед, оптимизатор может оптимизировать подзапрос, и все еще дать Вам ошибку. К счастью optimizer_switch
переменная может использоваться для выключения этого поведения; хотя я не мог рекомендовать делать это как что-то большее чем кратковременное исправление этой ошибки, или для маленьких одноразовых задач.
SET optimizer_switch = 'derived_merge=off';
Благодаря Peter V. MГёrch для этого совета в комментариях.
метод В качестве примера был от Baron Schwartz, первоначально опубликован в Nabble, перефразируемом и расширенном здесь.
Привяжите свойство IsSelected
элемента ListViewItem
к свойству вашей модели. Затем вам нужно работать только со своей моделью, а не беспокоиться о тонкостях пользовательского интерфейса, который включает в себя потенциальные опасности, связанные с виртуализацией контейнеров.
Например:
<ListView>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="IsSelected" Value="{Binding IsGroovy}"/>
</Style>
</ListView.ItemContainerStyle>
</ListView>
Теперь просто поработайте с IsGroovy
вашей модели. свойство для выбора / отмены выбора элементов в ListView
.
Вот мое лучшее предположение, что было бы гораздо более простым методом выбора. Поскольку я не уверен, что вы выбираете, вот общий пример:
var indices = new List<int>();
for(int i = 0; i < lstVariable_All.Items.Count; i++)
{
// If this item meets our selection criteria
if( lstVariable_All.Items[i].Text.Contains("foo") )
indices.Add(i);
}
// Reset the selection and add the new items.
lstVariable_All.SelectedIndices.Clear();
foreach(int index in indices)
{
lstVariable_All.SelectedIndices.Add(index);
}
Я привык видеть настраиваемый элемент SelectedItem, но я вижу, что вы не можете установить или добавить к нему, но, надеюсь, этот метод работает как замена.