Сообщение об ошибке синтаксиса SQL-запроса Access UNION

#sql #ms-access

Вопрос:

Я пытаюсь выполнить запрос объединения между двумя таблицами в моей базе данных, заявление, которое я написал, является

 SELECT tblMetalsResults.reportno, tblMetalsResults.sampleno, tblMetalsResults.element, tblMetalsResults.ElementResult, tblMetalsResults.ElementRL, tblMetalsResults.ElementAnalyst1, tblMetalsResults.ElementAnalyst2, tblMetalsResults.ElementDate1, tblMetalsResults.ElementDate2, tblLogging.loBattery, tblLogging.loTest FROM tblLogging INNER JOIN tblMetalsResults ON tblLogging.ReportNo = tblMetalsResults.reportno WHERE (((tblMetalsResults.reportno)=[forms]![frmlogging]![reportno])) UNION SELECT tblHerbicideResults.herbreportno, tblHerbicideResults.sampleno, tblHerbicideResults.24DResults, tblHerbicideResults.D45TPResults, tbllogging.lobattery, tbllogging.lotest FROM tbllogging INNER JOIN tblHerbicideResults ON tbllogging.Reportno = tblHerbicideResults.herbreportno WHERE (((tblHerbicideResults.reportno0=[forms]![frmlogging]![reportno]));  

Кто-нибудь знает, что я делаю не так? Это говорит о синтаксической ошибке в запросе объединения, когда я пытаюсь сохранить.

Комментарии:

1. Вам нужно иметь одинаковое количество полей в обоих SELECT s — у вас 11 в первом и всего 6 во втором. Начните с правильной работы каждой отдельной части запроса — возможно, вам потребуется заполнить фиктивные поля.

2. Если нет соответствующего поля, используйте значение заполнителя или просто Null в этой позиции. Я использую Null. Кроме того, есть ли опечатка в публикации или это в фактическом запросе — во втором предложении WHERE: .reportno0 .

Ответ №1:

обе стороны объединений должны иметь одинаковое количество столбцов и совместимые типы данных . если у вас нет этих столбцов , вы можете создать их как null :

 SELECT  tblMetalsResults.reportno,  tblMetalsResults.sampleno,  tblMetalsResults.element,  tblMetalsResults.ElementResult,  tblMetalsResults.ElementRL,  tblMetalsResults.ElementAnalyst1,  tblMetalsResults.ElementAnalyst2,  tblMetalsResults.ElementDate1,  tblMetalsResults.ElementDate2,  tblLogging.loBattery,  tblLogging.loTest FROM tblLogging INNER JOIN tblMetalsResults ON tblLogging.ReportNo = tblMetalsResults.reportno WHERE (((tblMetalsResults.reportno)=[forms]![frmlogging]![reportno])) UNION SELECT   tblHerbicideResults.herbreportno,  tblHerbicideResults.sampleno,  NULL,  tblHerbicideResults.24DResults,  tblHerbicideResults.D45TPResults,  NULL,  NULL,  NULL,  NULL,  tbllogging.lobattery,  tbllogging.lotest FROM tbllogging INNER JOIN tblHerbicideResults ON tbllogging.Reportno = tblHerbicideResults.herbreportno WHERE (((tblHerbicideResults.reportno0=[forms]![frmlogging]![reportno]));  

Комментарии:

1. Это сработало! Огромное спасибо!