Ich habe mehrere Tabellen mit einer unterschiedlichen Anzahl und Arten von Spalten und einer einzigen Spalte gemeinsam.Wie kombiniere ich Ergebnisse aus mehreren Tabellen mit verschiedenen Spalten?
+--------+---------+------------+-------------+
| person | beardID | beardStyle | beardLength |
+--------+---------+------------+-------------+
+--------+-------------+----------------+
| person | moustacheID | moustacheStyle |
+--------+-------------+----------------+
Ich möchte alle Ergebnisse abrufen, die einen bestimmten Wert der gemeinsamen Spalte entsprechen. Ich kann es mehrere select-Anweisungen wie folgt aus:
SELECT * FROM beards WHERE person = "bob"
und
SELECT * FROM moustaches WHERE person = "bob"
Aber dies erfordert mehrere MySQL-API-Aufrufe, die ineffizient zu sein scheint. Ich hatte gehofft, ich könnte UNION ALL verwenden, um alle Ergebnisse in einem einzigen API-Aufruf zu erhalten, aber UNION verlangt, dass die Tabellen die gleiche Nummer und den gleichen Typ von Spalten haben. Ich konnte eine SELECT-Anweisung schreiben, würde manuell Pad die Ergebnisse aus jeder Tabelle durch Spalten mit NULL-Werte hinzufügen, aber das schnell unhandlich für ein paar Tabellen mit ein paar mehr Spalten bekommen würde.
Ich suche ein Ergebnis ungefähr so gesetzt:
+--------+---------+------------+-------------+-------------+----------------+
| person | beardID | beardStyle | beardLength | moustacheID | moustacheStyle |
+--------+---------+------------+-------------+-------------+----------------+
| bob | 1 | rasputin | 1 | | |
+--------+---------+------------+-------------+-------------+----------------+
| bob | 2 | samson | 12 | | |
+--------+---------+------------+-------------+-------------+----------------+
| bob | | | | 1 | fu manchu |
+--------+---------+------------+-------------+-------------+----------------+
Gibt es eine Möglichkeit, dies zu erreichen, die schnell und wartbar ist? Oder mache ich lieber eine separate Abfrage für jede Tabelle?
Klarstellung:
Ich bin nicht auf der Suche nach einem kartesischen Produkt. Ich will keine Reihe für jede Kombination von Bart und Schnurrbart, ich will eine Reihe für jeden Bart und eine Reihe für jeden Schnurrbart.
Also, wenn es 3 passende Bärte und 2 passenden Schnurrbärte sind sollte ich 5 Reihen bekommen, nicht 6.
Während es in den meisten Datenbanken mit einem 'FULL JOIN' gemacht werden konnte, und in MySQL mit ITroubs 'Workaround, bezweifle ich ernsthaft, ob es einen signifikanten Leistungsgewinn gibt, und wahrscheinlich erstellen Sie nur einen Chaos von obskurem Code, dem Ihr Nachfolger Ihnen nicht danken wird. Klarer und präziser Code überwiegt in den meisten Fällen einen Leistungsgewinn in den sehr niedrigen Prozentsätzen. – Wrikken