我在数据库中有三个表(括号中我需要的列);
Alphadata(发票,DateRaised,金额,员工)
TL Auth(发票)
代理商(团队负责人)
我目前正试图将所有这些列用于一个查询的代码是这样的;
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 :(得分:1)
您错过了表格的名称和ON
这一行:
INNER JOIN Agents ON Agents.Alphaname = Alphadata.Staff;
答案 1 :(得分:0)
您错过了第二个和第三个表的连接条件。此外,如果使用表别名,则在编写SQL查询时会获得良好的里程。请注意,在下面的更正查询中,我在查询中将三个表别名。然后,您可以使用这些alises引用各个列,查询更容易阅读。
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;
答案 2 :(得分: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
子句,则会生成代理的笛卡尔积和Alphadata。您可以阅读有关笛卡儿积here的更多信息。
编辑1:从您的评论中我猜您正在使用MS Access?如果是这样,如果您有多个JOIN
- see here,我发现您需要括号。我在上面的查询中添加了它们。请再试一次。