Прошло много лет с тех пор, как я работал с запросами UNION в Access, но я не понимаю, почему это не работает.Чего мне не хватает?
SELECT IDAudit, TableName, RowID, ChangeDate, IDAPSCase
FROM dbo_APSCEI INNER JOIN (dbo_Audit INNER JOIN dbo_TableType ON dbo_Audit.IDTableType = dbo_TableType.IDTableType)
ON dbo_APSCEI.IDAPSCEI = dbo_Audit.RowID
WHERE (((TableName)="APSCEI") AND ((IDAPSCase)=379017))
UNION SELECT IDAudit, TableName, RowID, ChangeDate, IDAPSCase
FROM dbo_APCSUN INNER JOIN (dbo_Audit INNER JOIN dbo_TableType ON dbo_Audit.IDTableType = dbo_TableType.IDTableType)
ON dbo_APCSUN.IDAPCSUN= dbo_Audit.RowID
WHERE (((TableName)="APCSUN") AND ((IDAPSCase)=379017))
UNION SELECT IDAudit, TableName, RowID, ChangeDate, IDAPSCase
FROM dbo_APSCAI INNER JOIN (dbo_Audit INNER JOIN dbo_TableType ON dbo_Audit.IDTableType = dbo_TableType.IDTableType)
ON dbo_APSCAI.IDAPSCAI = dbo_audit.RowID
WHERE (((TableName)="APSCAI") AND ((IDAPSCase)=379017))
ORDER BY ChangeDate DESC , IDAPSCase;
По отдельности все 3 оператора SELECT работают.Я могу удалить любое 1 из 3 операторов SELECT, и оно будет работать.Но при всех трех попытках его запуска или даже сохранении происходит сбой Access.Но он сохраняет изменения, несмотря на сбой.(Microsoft Access перестал работать. Windows может попытаться восстановить вашу информацию.)
2 из трех задействованных таблиц (dbo_Audit и dbo_TableType) всегда одинаковы;меняется только 3-я таблица.Выходные столбцы всегда одинаковы.Синтаксис всегда один и тот же.
Если я добавлю дополнительный ')' к любому из предложений WHERE, он перехватит ошибку без сбоев.Когда я удаляю его и пытаюсь запустить или сохранить, снова происходит сбой Access.Я предполагаю, что средство проверки синтаксиса может справиться с этим, а оптимизатор запросов - нет.