2015-11-11 2 views
1

У меня есть четыре таблицы:SQL вопрос запрос сервера - неоднозначный колонка

  1. Applicant (помощь, aname)
  2. entrance_test (Etid, etname)
  3. etest_centre (etcid, местоположение)
  4. etest_details (помощь, etid, etcid, etest_dt)

Я хочу выбрать количество претендентов, у которых есть для каждого теста, для тестового центра.

Это мой текущий запрос:

select 
    location, etname, count(Aid) as number of applicants 
from 
    applicant as a 
inner join 
    etest_details as d on a.aid = d.aid 
inner join 
    Entrance_Test as t on t.Etid = d.Etid 
inner join 
    Etest_Centre as c on c.Etcid = d.Etcid 
group by 
    Location, Etname 

Это ошибка я получаю:

Неоднозначное имя столбца 'помощи'

+1

Имя столбца 'aid' находится в двух таблицах, которые соединяются, поэтому неясно, в какой таблице вы хотите, чтобы запрос выбирал данные из. Используйте таблицу alas:' select count (a.aid) 'или' count (d.aid) 'в зависимости от таблицы, которую вы хотите, выберите значение' aid'. – wahwahwah

ответ

0

Вы должны упомянуть псевдоним в пункт COUNT. Поскольку вы используете псевдонимы, было бы лучше использовать их в разделах SELECT и GROUP BY. В этом случае он должен быть:

SELECT   a.location, 
       a.etname, 
       COUNT(d.Aid) 

FROM   applicant AS a 
INNER JOIN  etest_details AS d ON a.aid = d.aid 
INNER JOIN  Entrance_Test AS t ON t.Etid = d.Etid 
INNER JOIN  Etest_Centre AS c ON c.Etcid = d.Etcid 
GROUP BY  a.Location, 
       a.Etname 
+0

Спасибо. Фактически, я использовал имя таблицы «заявитель.aid», но это не сработало. Я должен был использовать псевдонимы вместо имени таблицы, например, «a.Aid» или «d.Aid» – Mojtaba

+0

@Mojtaba Добро пожаловать –

1

У вас есть столбец aid в нескольких таблицах, и он не знает, какой выбрать из. Вы должны указать, из какой таблицы она используется, используя указанные вами псевдонимы.

В этом случае, так как a.Aid такая же, как d.Aid (из-за JOIN), я использую a псевдоним, но имейте в виду, если location и etname также появляются в нескольких таблицах, вы необходимо указать , который стол, из которого он должен выбрать.

Select  c.location, t.etname, Count(a.Aid) 
From  Applicant  As a 
Inner Join etest_details As d On a.aid = d.aid 
Inner Join Entrance_Test As t On t.Etid = d.Etid 
Inner Join Etest_Centre As c On c.Etcid = d.Etcid 
Group By c.Location, t.Etname 

Как правило, когда у вас есть несколько источников в одном запросе, вы должны всегда быть ясно, какую таблицу он должен прийти с. Даже если вы уверены, что он существует только в одном из них, это хорошая привычка во избежание подобных ситуаций в будущем.

+0

Я собираюсь пойти дальше и сказать, что вы должны быть откровенными о том, в какой таблице поле пришло от 100 % времени. Это просто лучше для ремонтопригодности. Я не получаю код в обзоре кода, который этого не делает, потому что мне приходилось отслеживать, откуда появилось поле из 20+ объединений в сложный отчетный запрос и не столь очевидное имя, чтобы выяснить причину проблемы. Для этого требуется буквально секунды, поэтому нет оправдания тому, что вы этого не делаете, – HLGEM

Смежные вопросы