MSAccess 2013: работает UNION любые 2 из 3 таблиц, UNION все 3 вылетает - PullRequest
0 голосов
/ 23 ноября 2018

Прошло много лет с тех пор, как я работал с запросами 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.Я предполагаю, что средство проверки синтаксиса может справиться с этим, а оптимизатор запросов - нет.

1 Ответ

0 голосов
/ 26 ноября 2018

Мне кажется, что порядок по влияет только на последний запрос.Если вам нужно упорядочить результат, сделайте запрос, который называет этот как SELECT * FROM MyUnionQuery ORDER BY ChangeDate DESC , IDAPSCase, и все должно быть хорошо!

...