2016-07-03 7 views
1

ich eine SQL-Abfrage in MS-Access haben, die (wenn sie in ihre Grundstruktur vereinfacht) läuft wie folgt aus:(msaccess zu MySQL) FROM Unterabfragen mit Alias ​​

SELECT 
    tableA.id, tableB.id 
FROM 
    (SELECT table.id FROM [table] WHERE (id mod 2 = 0)) AS tableA 
    INNER JOIN 
    (SELECT table.id FROM [table] WHERE (id mod 3 = 0)) AS tableB 
    ON tableA.id = tableB.id 
; 

, dass 6 der zurück id, 12 und so weiter , für A und B.

Wenn das Skript an MySQL angepasst wird, erkennt es den Alias ​​in den Unterabfragen nicht. Ich kann in MySQL keine Parallele finden, was wäre das?

+0

Was meinen Sie mit "der Alias ​​in den Unterabfragen"? Wie lautet der Alias? 'Tisch'? "id"? – Hammerite

+0

Ich nehme 'tableA' und' tableB' an. @DBS: Gibt es eine Fehlermeldung? Was bedeutet "nicht erkennen"? – Andre

+0

Danke für die Hilfe Jungs. Und Entschuldigung für den Tippfehler! ... Ich kann nicht glauben, dass ich 2 Stunden damit verloren habe! – DBS

Antwort

1

table ist keine gute Wahl für einen Tabellennamen. Trotz dieses Namens funktioniert Ihre Abfrage in MySQL 5.6, wenn Sie Backquotes für die eckigen Klammern ersetzen.

SELECT 
    tableA.id, tableB.id 
FROM 
    (SELECT table.id FROM `table` WHERE (id mod 2 = 0)) AS tableA 
    INNER JOIN 
    (SELECT table.id FROM `table` WHERE (id mod 3 = 0)) AS tableB 
    ON tableA.id = tableB.id 
; 

SQL Fiddle

Diese Version der Abfrage auch in Access arbeiten sollte, weil Access SQL entweder eckigen Klammern oder einfachen Anführungszeichen als Trennzeichen für Objektnamen akzeptiert.

+0

HansUp Danke für die Antwort! Ich weiß, 'table' ist kein guter Name - das war eine vereinfachte Version der ursprünglichen Abfrage (vielleicht zu stark vereinfacht;). Und ja, es hat funktioniert. Ich dachte, diese Syntax würde nicht für MySQL gelten, aber es war nur ein Tippfehler = P – DBS