Почему возникает синтаксическая ошибка в CASE WHEN? А теперь пусто с Iif

У меня есть одна таблица с информацией об оборудовании, а затем еще две связанные таблицы 2 связанные таблицы баз данных с изображениями, одна из них заполнена, следовательно, новая с новыми изображениями, которые нельзя было поместить в первую. Связь между изображениями и оборудованием осуществляется двумя полями: MARCA (марка) и MODELO (модель). Поэтому мне приходится искать, в какой таблице находится изображение оборудования. Нулевая проверка проверяет, если я смотрю на один, я не получаю изображение, а затем смотрю на другой. Я мог бы сделать это нормально только с одним таким:

SELECT [Tabela Equipamentos ULSM Geral].*, [Fotografias e Manuais de Equipamentos2].FOTO
FROM [Tabela Equipamentos ULSM Geral] LEFT JOIN [Fotografias e Manuais de Equipamentos2] ON ([Tabela Equipamentos ULSM Geral].MODELO = [Fotografias e Manuais de Equipamentos2].MODELO) AND ([Tabela Equipamentos ULSM Geral].Marca_ = [Fotografias e Manuais de Equipamentos2].MARCA);

Но с новым нужно добавить его, поэтому я использую случай, но он дает мне синтаксическую ошибку:

SELECT [Tabela Equipamentos ULSM Geral].*, CASE 
WHEN [Fotografias e Manuais de Equipamentos1].FOTO IS  NULL THEN [Fotografias e Manuais de Equipamentos2].FOTO 
ELSE [Fotografias e Manuais de Equipamentos1].FOTO
END AS FOTO
FROM [Fotografias e Manuais de Equipamentos2], [Fotografias e Manuais de Equipamentos1] INNER JOIN ([Tabela Equipamentos ULSM Geral] INNER JOIN [Fotografias e Manuais de Equipamentos2] AS [Fotografias e Manuais de Equipamentos2_1] ON ([Tabela Equipamentos ULSM Geral].MODELO = [Fotografias e Manuais de Equipamentos2_1].MODELO) AND ([Tabela Equipamentos ULSM Geral].Marca_ = [Fotografias e Manuais de Equipamentos2_1].MARCA)) ON ([Fotografias e Manuais de Equipamentos1].MODELO = [Tabela Equipamentos ULSM Geral].MODELO) AND ([Fotografias e Manuais de Equipamentos1].MARCA = [Tabela Equipamentos ULSM Geral].Marca_);

Так что я делаю не так в CASE?

РЕДАКТИРОВАТЬ: изменено на Iif, которое стало таким:

SELECT [Tabela Equipamentos ULSM Geral].*, 
IIf([Fotografias e Manuais de Equipamentos2].FOTO IS  NULL,[Fotografias e Manuais de Equipamentos1].FOTO, [Fotografias e Manuais de Equipamentos2].FOTO  ) 
FROM [Fotografias e Manuais de Equipamentos2], [Fotografias e Manuais de Equipamentos1] INNER JOIN ([Tabela Equipamentos ULSM Geral] INNER JOIN [Fotografias e Manuais de Equipamentos2] AS [Fotografias e Manuais de Equipamentos2_1] ON ([Tabela Equipamentos ULSM Geral].MODELO = [Fotografias e Manuais de Equipamentos2_1].MODELO) AND ([Tabela Equipamentos ULSM Geral].Marca_ = [Fotografias e Manuais de Equipamentos2_1].MARCA)) ON ([Fotografias e Manuais de Equipamentos1].MODELO = [Tabela Equipamentos ULSM Geral].MODELO) AND ([Fotografias e Manuais de Equipamentos1].MARCA = [Tabela Equipamentos ULSM Geral].Marca_);

Если это поможет, вот изображение структуры

Просмотр структуры

Теперь ошибки нет, но результат запроса пуст.


person Micael Florêncio    schedule 19.11.2013    source источник
comment
Access не выполняет операторы CASE. Вместо этого вы можете использовать нижний Iif().   -  person gvee    schedule 19.11.2013
comment
Или лучше было бы использовать Nz (функция доступа, похожая на ISNULL SQL Server или стандартную COALESCE), которая вернет свой первый аргумент, если только он не равен нулю, и в этом случае она возвращает свой второй аргумент.   -  person Damien_The_Unbeliever    schedule 19.11.2013
comment
Вы изменили столбец, по которому вы проверяете NULL, в своем редактировании (оригинал проверял 1, Iif проверял 2)   -  person Damien_The_Unbeliever    schedule 19.11.2013
comment
@Damien_The_Unbeliever Может быть, это была моя ошибка, когда я достаточно хорошо объяснил ситуацию, я тоже обновлю этот вопрос. Как я уже сказал, у меня есть 2 связанные таблицы баз данных с изображениями, одна из них заполнена, следовательно, новая с новыми изображениями, которые нельзя было поместить в первую. Связь между изображениями и оборудованием осуществляется через два поля: marca_ (марка) и modelo (модель). Поэтому мне приходится искать, в какой таблице находится изображение оборудования. Нулевая проверка проверяет, если я смотрю на один, я не получаю изображение, а затем смотрю на другой.   -  person Micael Florêncio    schedule 19.11.2013
comment
Как я предложил в комментариях к более раннему ответу, вам действительно следует подумать о повторном сохранении этих изображений [FOTO], чтобы уменьшить раздувание и посмотрите, сможете ли вы объединить два файла в один. Хранение двух отдельных файлов для (что должно быть) одной и той же таблицы, чтобы обойти ограничение в 2 ГБ, является и будет неприятностью.   -  person Gord Thompson    schedule 19.11.2013
comment
@GordThompson Итак, вы говорите, что используете GIMP, чтобы открыть их и экспортировать в PNG, верно? Я пытался обойти это решение в основном потому, что я работаю в государственном учреждении исключительно на одном из их компьютеров с множеством ограничений и множеством надоедливых бюрократических процедур, связанных с установкой чего-либо.   -  person Micael Florêncio    schedule 20.11.2013
comment
Нет необходимости использовать GIMP; Я просто использовал его, потому что он был у меня под рукой. Вы можете сделать аналогичное преобразование в самой .NET, используя System.Drawing.Image. Я только что попробовал это на одном из тестовых файлов, которые вы мне дали некоторое время назад: до преобразования файл .mdb (содержащий один файл JPEG с OLE-оболочкой) составлял 16,8 МБ. После конвертации, но до сжатия файл .mdb был 21,9 МБ. После сжатия и восстановления файл .mdb (теперь содержащий одно необработанное изображение PNG) составлял 5,3 МБ.   -  person Gord Thompson    schedule 20.11.2013
comment
@GordThompson Уже выполняет преобразование непосредственно с помощью кода, но в нем есть некоторые новые проблемы здесь   -  person Micael Florêncio    schedule 20.11.2013