2015-01-10 90 views
1

我遇到问题。问题是我无法获得简单的查询工作。我正在使用MS-Access。 基本上我必须做一个发票(Factuur)得到物业(博格)。我正在使用此查询无法获得子查询

SELECT Factuur.FactuurNR,Prijzen.Borg 
FROM Prijzen, Factuur 
WHERE Klasse IN 
(SELECT Autos.Klasse 
FROM Autos, Factuur 
WHERE Autos.AutoNR = Factuur.AutoNR); 

但是通过该查询,我得到所有可能位于它后面的所有Premises的InvoiceNR。 截图: Screenshot

但是当我尝试和执行的子查询只有它

SELECT Autos.Klasse 
FROM Autos, Factuur 
WHERE Autos.AutoNR = Factuur.AutoNR 

它给了我正确的汽车类。

enter image description here

我唯一需要的是,房产,利用正确的发票相匹配。 该处所基于汽车类。场地位于Prijzen餐桌。 谢谢,

回答

1

使用JOIN。试试这个方法:

SELECT Factuur.FactuurNR,Prijzen.Borg 
FROM ((Prijzen 
    INNER JOIN Autos ON Autos.Klasse = Prijzen.Klasse) 
    INNER JOIN Factuur ON Factuur.AutoNR = Autos.AutoNR) 
GROUP BY Factuur.FactuurNR,Prijzen.Borg; 
0

是的,问题是在子查询中,当你试图单独执行它会给你结果。但是当你将它与主查询结合起来时,它不会起作用,所以在子查询中添加一个组并给出答案。 例如:“SELECT Autos.Klasse FROM Autos,Factuur WHERE Autos.AutoNR = Factuur.AutoNR group by Prijzen.Borg”;

0
(SELECT Autos.Klasse 
FROM Autos, Factuur 
WHERE Autos.AutoNR = Factuur.AutoNR); 

返回一个标量(单数)值。

所以当你做Klasse =(SELECT ...)。这相当于写Klasse = true,或者Klasse = 3,或者Klasse = null。