2014-01-16 112 views
0

我有以下的SQL Server查詢,不能爲上帝的愛得到這個工作在MS Access。轉換SQL Server查詢訪問

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中完美工作。我究竟做錯了什麼?

感謝您的時間。

回答

1

我通常避免訪問像瘟疫,如果我可以大聲笑。

但是,它看起來像你的問題可能在演員陣容。如果我沒有記錯,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  ('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)。

編輯:另外,我不完全確定你可以在子句中使用子查詢。如果沒有,你可能需要使這個子查詢的大部分,然後離開加入Bezetting它並使用isnull(Bezetting.rijnummer) - 或任何它在訪問:-)

+0

它的工作!你是一個救星!非常感謝 :) – Michael