Das ist meine Frage
SELECT Id, productName, Largeimagepath, Discount, Price, Image FROM tablename1 where Active =1
union
SELECT Id, productName, Largeimagepath, Discount, Price, Image FROM tablename2 where Active =1
union
SELECT Id, productName, Largeimagepath, Discount, Price, Image FROM tablename3 where Active =1
Es funktioniert richtig.
Jetzt möchte ich productName
in Zukunft den Tabellennamen für den jeweiligen abrufen.
- Wie kann ich es holen?
Ich habe es versucht AS
.. so:
SELECT Id, productName, Largeimagepath, Discount, Price, Image
FROM tablename3 AS tablename
where Active = 1;
wurde aber nicht ausgegeben.
- Wie soll ich die Abfrage korrigieren und auch die Leistung der Abfrage verbessern?
mysql
query-performance
union
mysqli
Prashant Tapase
quelle
quelle
Antworten:
Wenn Sie verwenden
UNION
und wissen müssen, aus welcher Tabelle eine bestimmte Zeile stammt, verwenden Sie normalerweise einen fest codierten Wert, der in einer Spalte ähnlich der folgenden gespeichert ist:Dadurch wird eine neue Spalte
Source
mit einem Bezeichner zurückgegeben, der angibt, aus welcher Tabelle die Zeile stammt.Wie @ypercube in den Kommentaren vorgeschlagen hat, möchten Sie möglicherweise auch eine Änderung in a vornehmen.
UNION ALL
Dies beinhaltet ein Duplikat, aber Sie haben auch eine Kennung für die Tabelle, aus der es stammt. Durch die Verwendung von aUNION ALL
werden die Auswirkungen des Entfernens von Dups auf die Leistung beseitigt.quelle
Sie können dies mit versuchen
UNION ALL
Da Sie wahrscheinlich auch einen doppelten Eintrag benötigen, wird das Hinzufügen eines Tabellennamens eindeutig sein und die Leistung wird ebenfalls verbessert
quelle
Die folgende Abfrage funktioniert besser und gibt Ihnen eine bessere Vorstellung, da die obigen Abfragen Zeilen nicht zweimal rendern.
Das obige Skript gibt keine doppelten Datenzeilen an und stellt sicher
Wenn Sie gemeinsame Daten aus der t2-Tabelle wünschen, drehen Sie den Join nach links
quelle