Alias ​​eine Tabelle in Knex

8

Ich habe eine SQL-Abfrage, die zweimal auf die gleiche Tabelle verweist, und ich muss die Tabelle auf zwei separate Aliase umleiten. Ich kann mir nicht vorstellen, wie ich das mit Knex machen soll.

Es gibt eine "Words" -Tabelle und eine "Users" -Tabelle. Die Words-Tabelle hat zwei Fremdschlüssel, "author_id" und "winner_id", die auf die Spalte "id" der Tabelle "Users" verweisen.

Hier ist die SQL, die ich in Knex schreiben möchte:

%Vor%

Ich bin ein wenig verloren, wie man das in Knex macht. Mein erster Versuch beinhaltete kein Aliasing, und so bekam ich einen Fehler "Tabelle mehr als einmal verwendet". Als ich versuchte, die .as () -Methode zu verwenden, beklagte sich knex, dass eine fehlende .from () -Klausel existierte. Wird die .as () -Methode nur für Aliasing-Unterabfragen verwendet, und ich sollte nicht erwarten, dass sie für Alias-Tabellen verwendet wird?

    
Bobby Circle Ciraldo 06.02.2015, 01:39
quelle

2 Antworten

26

Ich denke, ich habe es herausgefunden. In knex.js sagen Sie, dass Sie eine Tabelle wie folgt angeben:

knex.select( '*' ).from( 'Users' )

Dann können Sie einfach das Schlüsselwort AS in die Anführungszeichen des Tabellennamens einfügen, um es wie folgt zu aliasieren:

knex.select( '*' ).from( 'Users AS u' )

.. und Sie können dies auch für Spaltennamen tun; also würde mein ursprünglicher SQL in knex-land so aussehen:

%Vor%

Ich glaube, ich wurde durch das Vorhandensein von Knex's .as () -Methode verwirrt, die (soweit ich derzeit verstehe) nur für Unterabfragen gedacht ist, nicht für Aliasing-Tabellen oder Spaltennamen.

    
Bobby Circle Ciraldo 06.02.2015, 08:23
quelle
-1

Aliasing oder die Methode .as() wird nicht nur für Unterabfragen verwendet, sondern kann auch für Aliasing-Spaltennamen und Tabellen verwendet werden. In Ihrem Fall müssen Sie einen Alias ​​für Ihre Tabelle verwenden, weil Sie die Tabelle zweimal verwendet haben. Bei Ihrem ersten Versuch wurde ein Fehler angezeigt, weil Ihr SQL verwirrt wurde. Indem Sie einen Alias ​​in die Tabelle einfügen, der zweimal verwendet wird, haben Sie ihm eine Kennung gegeben, dass sich ua.Users table jetzt von uw.Users table unterscheidet. Ich hoffe, es hat dir geholfen.

    
Rigel1121 06.02.2015 02:10
quelle

Tags und Links