2017-04-21 2 views
1

Manchmal ist es praktisch, alle Daten in einer Tabelle sowie die Daten, die Sie möchten, z.Warum `wählen *, Spalte aus Tabelle;` arbeiten, aber `Spalte auswählen, * aus Tabelle;` nicht funktionieren

Aber es wäre praktischer, zuerst die gewünschten Daten zu erhalten, gefolgt von den restlichen Daten.

Die zweite SQL-Anweisung schlägt jedoch mit einem Syntaxfehler fehl.

Warum ist das?

+1

[SELECT] (https://dev.mysql.com/doc/refman/5.5/en/select.html): "Die Verwendung eines nicht qualifizierten' * 'mit anderen Elementen in der Auswahlliste kann zu einem Parse-Fehler führen Um dieses Problem zu vermeiden, verwenden Sie einen qualifizierten 'tbl_name. *' Reference "." –

+1

Ich habe ein bisschen herumgesucht mit was @Damien_The_Unbeliever zur Verfügung gestellt. Interessanterweise gibt es * nichts * jenseits 'das kann einen Parse-Fehler erzeugen'. Es gibt nicht einmal eine Erklärung darüber, welche Art von Parse-Fehler dies zur Folge haben könnte oder wo dies auftreten würde. Im Jahr 2007 wurde ein [bug report] (https://bugs.mysql.com/bug.php?id=26066) dafür eingereicht und zwei Jahre später mit genau derselben Erklärung abgeschlossen. –

+0

Gemäß ANSI/ISO SQL, wenn ein unqualifiziertes '*' verwendet wird, muss es in der Auswahlliste allein sein. – jarlh

Antwort

2

ich gesucht habe ein bisschen und ich fand darstellen. Haftungsausschluss: Ich fand sie nur etwas über den Link Suche Damien in den Kommentaren versehen: "Use of an unqualified * with other items"

Sie erhalten diese SO Fragen:

In den Kommentaren zum answer der letzten Frage habe ich einen Link zu einemgefundenaus dem Jahr 2007, die im Jahr 2009 mit der folgenden Erklärung wurde geschlossen:

I http://dev.mysql.com/doc/refman/5.1/en/select.html zu reflektieren das Verhalten aktualisiert:

Eine Auswahlliste nur aus einem einzigen unqualifizierten * besteht, kann als Stenografie verwendet werden, um wählen Sie alle Spalten aus allen Tabellen:.

SELECT * FROM INNER JOIN t1 t2 ...

tbl_name * kann als qualifizierte Stenografie verwendet werden, um alle Spalten auszuwählen aus der benannten Tabelle:

SELECT t1. , t2. FROM t1 INNER JOIN t2 ...

Verwendung nicht * mit anderen Gegenständen in der Auswahlliste kann erzeugt einen Parser-Fehler. Um dieses Problem zu vermeiden, verwenden Sie eine qualifizierte tbl_name. * Referenz

SELECT AVG (Ergebnis), t1. * FROM t1 ...

Highlight/Bold von mir zur Verfügung gestellt. Ich konnte keine weitere Erklärung für dieses Verhalten finden oder welche Art von Parse-Fehler könnte auftreten oder wo es auftreten würde.

Wenn jemand etwas Zeit hat, könnte dies beantwortet werden, indem man in den Quellcode von MySQL oder MariaDB (der das gleiche Verhalten hat) eintaucht, aber kurz davor sehe ich niemanden, der eine echte Antwort darauf findet.

+0

Danke für Ihre Zusammenfassung der verschiedenen Informationen. +1 – Luke

0

Da mysql seine Syntax nachsichtig ist, aber nicht immer ...

Neben, wenn Sie eine gültige SQL-Abfrage schreiben wollen, sollte es so sein:

select col1, col2, users.* 
from users 

Oder mit Alias auf dem Tisch und Säule: insgesamt 3 Fragen auf, so dass auf diese Frage verwandt sind oder die gleiche Frage

select u.*, 'foobar' as col1, 1 as col2 
from users u 
Verwandte Themen