2017-06-13 70 views
1

我越来越SQL访问多个FK到同一表ID

运行时错误“3061”:参数太少。预计1

我的表是:

Libro{ 
    idLibro 
    fromNumber 
    toNumber 
    control1 > FK Persona 
    control2 > FK Persona 
} 

Persona{ 
    idPersona 
    name 
} 

试过这2种方法,但得到了同样的错误

sql= "SELECT L.*, P.nombre as c1, Q.nombre as c2 
    FROM ((Libro L INNER JOIN Persona P ON P.idPersona = L.control1) 
    INNER JOIN Persona Q ON Q.idPersona = L.control2)" 

而且

sql= "SELECT L.*, P.nombre as c1, Q.nombre as c2 
    FROM Libro L, Persona P, Persona Q 
    WHERE L.control1=P.idPersona AND L.control2=Q.idPersona" 

两个表都有此值:

Libro{ 
    (1, 100, 150, 1, 3) 
    (2, 151, 300, 2, 3) 
} 

Persona{ 
    (1, 'Juan') 
    (2, 'Mario') 
    (3, 'Luis') 
} 

我期望是让这两个名字,在从利布罗

+0

也许你需要'as'定义的表的别名。 –

+0

有或没​​有“Libro _AS_ L”它会得到相同的错误,不幸的是 –

+0

这是一个VBA运行查询。你可以发布完整的代码,以便我们看到执行?或者,将SQL放在查询窗口中并从那里运行并查看有哪些字段提示*输入参数*? – Parfait

回答

0

表中的注册表控制1控制2引用您的别名(p和q)没有名为[NOMBRE]列,因此访问认为它们是参数,因此可能会提示您在尝试运行时输入参数。你使用[name]而不是[nombre]。所以要么改变你表中的列名这不会是一个坏主意,因为[名]是一个保留字,或者改变您的查询:

SELECT L.*, P.name, q.name 
FROM (Libro AS L INNER JOIN Persona AS P ON L.control1 = P.idPersona) INNER JOIN Persona AS q ON L.control2 = q.idPersona; 
+0

是的,对不起。正如你已经知道的那样,我把这个从西班牙语翻译成英语在这里问,这就是为什么名字<> nombre,但我已经确定了 –

+0

那么这样可以解决你的问题吗? –

相关问题