我有以下SQL Server查询,不能因为上帝的爱而让它在MS Access中运行。
select
U.voorstellingnummer, U.uitvoeringnummer, U.zaalnaam, S.rijnummer, S.stoelnummer
from
Uitvoering as U
inner join
Stoel as S on U.zaalnaam = S.zaalnaam
where
U.voorstellingnummer = 4 AND U.uitvoeringnummer = 1
AND
-- (S.rijnummer, S.stoelnummer) not in (select(B.rijnummer, B.stoelnummer)
('rij '+ cast(S.rijnummer as varchar(3)) + ' stoel ' + cast(S.stoelnummer as varchar(3))) not in
(select('rij '+ cast(B.rijnummer as varchar(3)) + ' stoel ' + cast(B.stoelnummer as varchar(3)))
from Bezetting as B
where B.voorstellingnummer = 4 AND B.uitvoeringnummer = 1)
我已经将它添加了几天,但它在第一个AS上一直给我语法错误。
该查询在SQL Server中运行良好。我做错了什么?
感谢您的时间。
答案 0 :(得分:1)
如果可以,我通常会像瘟疫那样避免访问。
但是,看起来您的问题可能出现在演员阵容中。如果我没记错,Access将执行从numeric到char的隐式转换。如果是这种情况,此查询应该有效:
select U.voorstellingnummer, U.uitvoeringnummer, U.zaalnaam, S.rijnummer, S.stoelnummer
from Uitvoering as U
inner join Stoel as S
on U.zaalnaam = S.zaalnaam
where U.voorstellingnummer = 4
AND U.uitvoeringnummer = 1
AND ('rij ' & S.rijnummer & ' stoel ' & S.stoelnummer) not in
(
select ('rij ' & B.rijnummer & ' stoel ' & B.stoelnummer)
from Bezetting as B
where B.voorstellingnummer = 4
AND B.uitvoeringnummer = 1
)
如果隐式转换不起作用,Cstr()应该将数字转换为字符串。如果你只想要左边的3个字符,你可能需要做左边的事情(cstr(S.rijnummer),3)。
编辑:另外,我不完全确定你可以在are子句中使用子查询。如果没有,您可能需要将其中的大多数作为子查询,然后将Bezetting连接到它并使用isnull(Bezetting.rijnummer) - 或者Access中的任何内容: - )