SQL multiple istruzione join

Quando avevo solo un inner join in SQL istruzione, ha funzionato perfettamente. Ho provato a entrare in una seconda tabella, e ora ricevo un errore che dice che c’è un errore di sintassi (operatore mancante). Cosa c’è di sbagliato?

adsFormView.SelectCommand = "SELECT * FROM [tableCourse] INNER JOIN [tableGrade] ON [tableCourse].[grading] = [tableGrade].[id] INNER JOIN [tableCourseType] ON [tableCourse].[course_type] = [tableCourseType].[id] WHERE [prefix]='" & myPrefix & "' AND [course_number]='" & myCourseNum & "'"
  • -Visualizzare la finestra di comando in una finestra di messaggio per vedere cosa viene in su. Penso che la tua join potrebbe essere ok, e il problema è con le virgolette o qualcosa del genere.
  • Se mi ricordo bene la sintassi di accesso ha allegando ogni strato con una parentesi in modo da provare FROM [tableCourse] INNER JOIN [tableGrade] ON [tableCourse].[grading] = [tableGrade].[id] (INNER JOIN [tableCourseType] ON [tableCourse].[course_type] = [tableCourseType].[id])
InformationsquelleAutor Sara | 2011-10-21



2 Replies
  1. 151

    Per il multi-join della tabella, è necessario nido extra unisce in parentesi:

    SELECT ...
    FROM ((origintable
    JOIN jointable1 ON ...)
    JOIN jointable2 ON ...)
    JOIN jointable3 ON ...

    in sostanza, per ogni tabella si uniscono passato il primo, avete bisogno di un supporto prima l’originale ‘DAL tavolo, e una parentesi di chiusura in corrispondenza JOIN ‘su’ clausola.

    • Tale non-intuitivo “caratteristica” per chi è abituato a normale SQL…
    • Questo era esattamente quello che stavo cercando. Continuava a dirmi la sintassi o entrare è stato corretto quando avrebbe funzionato perfettamente su SQL Management studio.
  2. 22

    MS Access (nello specifico, Jet/ACE) richiede parentesi con join multipli. Provare:

    adsFormView.SelectCommand = _
        " SELECT * FROM ([tableCourse] " & _
        " INNER JOIN [tableGrade] " & _
        "     ON [tableCourse].[grading] = [tableGrade].[id]) " & _
        " INNER JOIN [tableCourseType] " & _
        "     ON [tableCourse].[course_type] = [tableCourseType].[id] " & _
        " WHERE [prefix]='" & myPrefix & "'" & _
        "   AND [course_number]='" & myCourseNum & "'"
    • “in particolare, i Jet database engine” — non è vero: lo stesso vale per il Motore di Database di Access (ACE), la versione del motore.
    • Il mio punto era che il requisito per la parentesi viene dal db motore, non applicazione. Ma hai ragione, il requisito si applica anche per ACE/ADE/quello-che-MS-viene-chiamata-si-questi-giorni. Ho aggiornato la mia risposta di conseguenza.
    • Non si dovrebbe mai usare la concatenazione della stringa a forma di istruzioni SQL e query, utilizzare i parametri, invece.

Lascia un commento