Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Doppelspaltenfehler nur, wenn die Abfrage als Unterabfrage verpackt ist

Der Grund, warum Sie den Fehler erhalten haben, ist wegen des Aliasings AS X . Aber das Problem ist wirklich, dass Sie * verwendet haben , anstatt die gewünschten Felder aufzulisten.

In der ersten Abfrage die SELECT * erzeugt tatsächlich Felder wie:

A.id, A.name, A.description, B.id, B.name, B.date_started, C.id, C.name, C.isDeleted

Dies funktioniert gut, es sei denn, Sie versuchen, ein Feld direkt über seinen Namen zu referenzieren und verwenden nicht seinen Alias. In beiden Fällen wird Ihre SQL-Engine kein Problem damit haben, was auch immer Sie mit der Ergebnismenge tun, es könnte jedoch immer noch ein Problem geben.

Wenn Sie Ihre Abfrage jedoch in eine Unterabfrage verschieben und die Ergebnisse AS X aliasieren , dann landen Sie bei:

X.id, X.name, X.description, X.id, X.name, X.date_started, X.id, X.name, X.isDeleted

Jetzt können Sie sehen, warum es sich beschwert. Sie können sehen, warum es auch schlecht ist, * zu verwenden , weil diese Kombination für einige Zeit funktionieren kann, und dann fügen Sie ein neues Feld zu einer vorhandenen Tabelle hinzu, das ist dasselbe wie eine andere Tabelle, und zack, jede Abfrage, die Sie mit diesen beiden Tabellen geschrieben haben, muss jetzt sein umgeschrieben.