2016-11-11 4 views
0

У меня есть три таблицы в базе данных (с колонками, которые мне требуются в скобках);Соединитесь с тремя таблицами

  • Alphadata (счет-фактура, DateRaised, сумма, Staff)

  • TL Auth (счет-фактура)

  • Agents (руководитель группы)

код Я в настоящее время это попытка использовать все эти столбцы в одном запросе;

SELECT Alphadata.Invoice, Alphadata.DateRaised, Alphadata.Amount, Alphadata.Staff, Agents.TeamLeader, TlAuth.Invoice 

FROM Alphadata 

INNER JOIN TlAuth ON Alphadata.invoice = TlAuth.invoice 

INNER JOIN Agents.Alphaname = Alphadata.Staff; 

Я думаю, что что-то пропустил. Но у меня есть столбцы AlphaData и TL Auth, когда я удаляю Агенты (последняя строка), но второй я снова добавляю, что он идет не так.

ответ

0
SELECT Alphadata.Invoice, Alphadata.DateRaised, Alphadata.Amount, Alphadata.Staff, Agents.TeamLeader, TlAuth.Invoice 
    FROM (Alphadata 
    INNER JOIN TlAuth ON Alphadata.invoice = TlAuth.invoice) 
    INNER JOIN Agents ON Agents.Alphaname = Alphadata.Staff; 

Попробуйте с вышесказанным. Если вы опустите предложение ON, это приведет к декартовому продукту агентов и альфа-данных. Вы можете узнать больше о декартовом продукте here.

EDIT 1: С вашего комментария Я предполагаю, что вы используете MS Access? Если это так, я обнаружил, что вам нужны скобки, если у вас более одного JOIN - see here. Я добавил их в вышеуказанный запрос. Пожалуйста, попробуйте еще раз.

+0

Да, я скопировал это, и теперь получаю синтаксическую ошибку (отсутствующий оператор). Не 100%, что проблема в том, как читать это, она нацелена на правильные вещи! – Nik

+0

Вы используете MS Access? –

+0

@Nik Повторите попытку с вышеуказанными изменениями. –

1

Вы пропустили имя таблицы и ON в этой строке:

INNER JOIN Agents ON Agents.Alphaname = Alphadata.Staff; 
+0

Я только что добавил, что, похоже, теперь получает синтаксическую ошибку (пропавший оператор). Думаю, я мог бы что-то не так в другом месте? – Nik

0

Вы отсутствовали условие объединения для второй и третьей таблиц. Кроме того, вы получаете хороший пробег при написании SQL-запросов, если используете таблицу aliases. Обратите внимание, что в исправленном запросе ниже я использовал псевдоним трех таблиц в вашем запросе. Затем вы можете ссылаться на различные столбцы, используя эти алименты, и запрос легче читать.

SELECT t1.Invoice, 
     t1.DateRaised, 
     t1.Amount, 
     t1.Staff, 
     t2.Invoice, 
     t3.TeamLeader, 
FROM Alphadata t1      -- t1, t2 and t3 are aliases, or nicknames 
INNER JOIN TlAuth t2     -- for the actual tables in your query 
    ON t1.invoice = t2.invoice 
INNER JOIN Agents t3 
    ON t3.Alphaname = t1.Staff; 
Смежные вопросы