2016-08-09 95 views
1

Da ich eine linke Verknüpfung mache, die manchmal kein Ergebnis liefert, wird die ID meiner "ersten" Tabelle irgendwie auf 0 gesetzt. Ich möchte jetzt die ID zweimal auswählen , und mache die Kopie unveränderlich, so dass ich immer noch darauf zugreifen kann, selbst wenn der Join fehlschlägt.Selektiere dieselbe Zeile zweimal, und mache die Kopie unveränderlich

Hier ist meine Frage:

SELECT * FROM table1 
LEFT JOIN table2 ON table1.ID = table2.ID 
LEFT JOIN table3 ON table1.ID = table3.ID 

Jede Zeile in Tabelle 1 hat nur die gleiche ID in entweder table2 oder table3, so für jede Zeile, einer der beiden verbindet wird „nicht bestanden“. Hier ist, was ich als Ergebnis (Mock Ergebnis) erhalten:

+------+------------+------------+------------+------------+------------+------------+ 
| ID | Table1Col1 | Table1Col2 | Table2Col1 | Table2Col2 | Table3Col1 | Table3Col2 | 
+------+------------+------------+------------+------------+------------+------------+ 
| NULL | Something | Something | NULL  | NULL  | Something | Something | 
| NULL | SomeValue | SomeValue | Something | Something | NULL  | NULL  | 
+------+------------+------------+------------+------------+------------+------------+ 

Was ich erreichen möchte: Halten „ID“ von NULL.

(Auch die Auswahl von "table1.ID als MyID, *" gibt mir ein SQL-Fehler)

(Werte Auswahl explizit steht außer Frage, aus Designgründen)

+0

Was ist der Fehler können Sie einschließen? –

+0

Ich denke, "unveränderlich" ist nicht das richtige Wort, da '*' nur ein ID-Feld zur Verfügung stellt, das möglicherweise nur das falsche ist. Die Fehlermeldung wäre hilfreich gewesen. – Jakumi

Antwort

2

Die folgende Abfrage sollte Arbeit explizit ...

, die Felder Benennung
SELECT table1.ID, table1.Table1Col1, table1.Table1Col2, 
     table2.Table2Col1, table2.Table2Col2, 
     table3.Table3Col1, Table3.Table3Col2 
FROM table1 
LEFT JOIN table2 ON (table1.ID=table2.ID) 
LEFT JOIN table3 ON (table1.ID=table3.ID) 

Update für Platzhalter: Sie haben einen Tisch zu schaffen, wenn * nicht nur wählen ist „colu mn ".

Vorsicht, dass identische Spalten mehrmals auf diese Weise angezeigt werden, was auch immer das Ergebnis erwarten sollte. In PHP zum Beispiel glaube ich, dass der letzte Wert gewinnt (wenn auf Spaltenname zugegriffen wird).

+0

Ja, wenn ich sie explizit benennen könnte. Ich habe vergessen, dies in meinem Beitrag zu erwähnen, aber der zukünftige Webadministrator sollte in der Lage sein, Tabellen oder Spalten hinzuzufügen, ohne den Abfragecode ändern zu müssen. (Das mag ein bisschen komisch klingen, aber wenn '*' verwendet wird, funktioniert das ganz gut) – user2065501

+0

Nun, es funktioniert nicht ganz gut, oder Sie würden die Frage nicht stellen? ^^. Bitte schreiben Sie die Fehlermeldung, die Sie beim Umbenennen erhalten haben. – Jakumi

+0

Nun, ich meinte alles andere, aber ja, du hast Recht: P. Ich hätte den Fehler gepostet, wenn es etwas bedeutet hätte. Ich bekomme nur 'Sie haben einen Fehler in Ihrer SQL-Syntax in der Nähe von" * FROM ... "'. Oder ich bin zu dumm, um MySQL richtig einzusetzen. Ich weiß es nicht. – user2065501