У меня есть таблица, содержащая идентификатор следующим образом:выберите строки, не содержащиеся в таблице
ID
----------------
10000V9F
10000V9O
10000VAh
10000VCB
10000VDn
10000VE9
10000VF4
10000VFE
10000VFH
10000VFW
10000VG9
Теперь я хочу, чтобы получить все данные из другой таблицы, которая не имеет ни одного из этих идентификаторов. Therefor создать запрос, подобный этому:
SELECT * from TABLE1 where ID NOT IN (...)
Где ...
список идентификаторов приобретаемых с помощью другого запроса, и который содержит все ранее упомянутые идентификаторы из первой таблицы. Этот список определяется следующим образом:
string idString = "'" + String.Join("'", this.GetIDsForTableNames(newTables).ToArray()) + "'";
Метод GetIDsForTableNames
также может возвращать пустой список, не содержащий на всех элементов. В этом случае результирующий запрос сверху приведет к чему-то вроде этого:
SELECT * from TABLE1 where ID NOT IN ('')
Что я ожидаю, чтобы вернуть все идентификаторы из TABLE1
. Но вместо этого возвращается NONE. Однако когда я стреляю SELECT * from TABLE1 where ID NOT IN ('a')
, где a
- это просто манекен, все строки из TABLE1
возвращаются.
Итак, как я могу обрабатывать список-пустую-дело подходящим образом или почему он не работает с пустым списком?
EDIT: Хорошо, кажется, что некоторые окрестности недостаточно ясны. Поскольку я не создаю self-строку SQL (это делается с помощью стороннего инструмента), я могу только изменить whereclause, который является лишь своего рода минимальным SQL (подзапросы и объединения не поддерживаются). Вот почему я использовал ID IN
-техник.
Как вы строите команду select (а не idString)? –
Когда список идентификаторов пуст и IN ('') не работает, я боюсь, что единственным грязным решением является вставить idstring в непустое значение, которое никогда не будет встречено как Id. – Graffito
@ Graffito Вот что я уже упоминал с помощью фиктивной ценности. Yeap, это, вероятно, путь. – HimBromBeere