簡體   English   中英

MS Access等效查詢

[英]MS Access equivalent query

我正在嘗試編寫一個我知道與MySQL兼容的查詢到MS Access。 這是一個編程任務,所以我不希望直接給出答案,但我不太了解MS Access的SQL版本。 我自己編寫了MySQL,並對其進行了測試。 那時我意識到查詢需要適用於MS Access。 所以這是已知的代碼:

SELECT `D`.`RENT_NUM`, 
    `R`.`RENT_DATE`, 
    `D`.`VID_NUM`, 
    `M`.`MOVIE_TITLE`, 
    `D`.`DETAIL_DUEDATE`, 
    `D`.`DETAIL_RETURNDATE`, 
    `D`.`DETAIL_FEE`, 
    `D`.`DETAIL_RETURNDATE` - `D`.`DETAIL_DUEDATE` AS `DAYS_LATE`
FROM `detailrental` AS `D`
    JOIN `rental` AS `R` ON `D`.`RENT_NUM` = `R`.`RENT_NUM`
    JOIN `video` AS `V` ON `D`.`VID_NUM` = `V`.`VID_NUM`
    JOIN `movie` AS `M` ON `V`.`MOVIE_NUM` = `M`.`MOVIE_NUM`
WHERE `D`.`DETAIL_RETURNDATE` - `D`.`DETAIL_DUEDATE` > 0
    ORDER BY `R`.`RENT_NUM`, `M`.`MOVIE_TITLE`;

我一直在嘗試轉換為MS Access SQL,但我仍然沒有得到它。 這是最近的嘗試。

SELECT [D].[RENT_NUM],
    [R].[RENT_DATE],
    [D].[VID_NUM],
    [M].[MOVIE_TITLE],
    [D].[DETAIL_DUEDATE],
    [D].[DETAIL_RETURNDATE],
    [D].[DETAIL_FEE],
    [D].[DETAIL_RETURNDATE] - [D].[DETAIL_DUEDATE] AS [DAYS_LATE]
FROM [DETAILRENTAL] AS [D] INNER JOIN 
( 
  [RENTAL] AS [R] INNER JOIN 
  (
    [VIDEO] AS [V] INNER JOIN [MOVIE] AS [M] ON [V].[MOVIE_NUM] = [M].[MOVIE_NUM]
  )  ON [D].[VID_NUM] = [V].[VID_NUM]
) ON [D].[RENT_NUM] = [R].[RENT_NUM]
WHERE [D].[DETAIL_RETURNDATE] - [D].[DETAIL_DUEDATE] > 0
    ORDER BY [R].[RENT_NUM], [M].[MOVIE_TITLE];

我收到的Syntax error in JOIN operation. 我知道這意味着什么,但我不知道MS Access的SQL是否足以發現錯誤。

已經有一段時間了,因為我必須編寫任何訪問查詢,所以我只使用官方文檔描述的語法http://msdn.microsoft.com/en-us/library/office/bb208854(v=office.12) .aspx 弄清楚它有語法錯誤。 因此,要進行查詢工作,您必須用括號包裝JOIN 但是每個ON語句仍然需要在每組括號內,而不是在外部。 這應該可以解決問題。

SELECT [D].[RENT_NUM]
       ,[R].[RENT_DATE]
       ,[D].[VID_NUM]
       ,[M].[MOVIE_TITLE]
       ,[D].[DETAIL_DUEDATE]
       ,[D].[DETAIL_RETURNDATE]
       ,[D].[DETAIL_FEE]
       ,[D].[DETAIL_RETURNDATE] - [D].[DETAIL_DUEDATE] AS [DAYS_LATE]
    FROM (
           (
             (
               [detailrental] AS [D] )
             INNER JOIN [rental] AS [R]
                ON [D].[RENT_NUM] = [R].[RENT_NUM] )
           INNER JOIN [video] AS [V]
            ON D.VID_NUM = [V].[VID_NUM] )
    INNER JOIN [movie] AS [M]
        ON [V].[MOVIE_NUM] = [M].[MOVIE_NUM]
    WHERE [D].[DETAIL_RETURNDATE] - [D].[DETAIL_DUEDATE] > 0
    ORDER BY [R].[RENT_NUM]
       ,[M].[MOVIE_TITLE];

既然我們知道問題出在JOIN上,那么讓我們從最里面的括號開始,然后向外工作:

[VIDEO] AS [V] 
INNER JOIN 
[MOVIE] AS [M] 
    ON [V].[MOVIE_NUM] = [M].[MOVIE_NUM]

看起來很好。 讓我們走出一個級別:

[RENTAL] AS [R] INNER JOIN 
(
    [VIDEO] AS [V] 
    INNER JOIN 
    [MOVIE] AS [M] 
        ON [V].[MOVIE_NUM] = [M].[MOVIE_NUM]
)
    ON [D].[VID_NUM] = [V].[VID_NUM]

這個JOIN不起作用。 你能明白為什么嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM