SQL: объединение таблиц по первичному ключу и возврат первичного ключа

Я пишу приложение C# и использую Access .mdb. У меня есть таблица с сообщениями электронной почты и таблица с отношениями сообщений (каждое сообщение электронной почты может быть назначено нескольким командам работников), поэтому строки в таблице отношений имеют поля «msgId» и «teamName».

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

"SELECT * FROM Mails INNER JOIN MailAssignments ON Mails.msgId = MailAssignments.msgId"

Но я думаю, что он не возвращает msgId, потому что таблицы объединяются в этом поле, но тогда я не могу идентифицировать сообщения в своем коде C#.

Как сделать так, чтобы запрос возвращал мне msgId?


person Val    schedule 07.03.2012    source источник


Ответы (2)


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

SELECT Mails.* 
FROM Mails INNER JOIN MailAssignments 
ON Mails.msgId = MailAssignments.msgId
person aleroot    schedule 07.03.2012

Он должен появиться дважды в наборе результатов для Mails.msgId и MailAssignments.msgId соответственно. Однако не следует ожидать наличия двух столбцов с именами msgId. Скорее, СУБД должна устранять неоднозначность столбцов. Это требование стандартов SQL, кстати.

IIRC Access переименует оба столбца, чтобы устранить неоднозначность. Это объясняет, почему в результате нет столбца с именем msgId.

person onedaywhen    schedule 07.03.2012