Frage

Ich bin der Auswahl 1-Feld von 1 Tisch und es in eine temporäre Tabelle zu speichern.

Manchmal endet die Tabelle mit 0 Zeilen auf.

Ich mag das Feld auf eine andere Tabelle hinzuzufügen, die mehr als 20 Felder

hat

Regelmäßige Union wird nicht für mich arbeiten, weil der Feld # Mismatch. Äußere gewohnt für mich arbeiten, weil es nichts zu vergleichen. NVL nicht auf der ersten temporären Tabelle arbeiten.

Wer weiß, wie es zu tun?

AKTUALISIERT:

ich nicht zu erwähnen .... Wenn die Tabelle, die ein Feld ruft eine Übereinstimmung in den anderen Fällen findet, dieser Code, die ich jetzt bin mit funktioniert ....

SELECT DISTINCT reqhead_rec.resp_name<br>
FROM reqhead_rec, biglist<br>
WHERE reqhead_rec.req_no = biglist.req_no
 AND reqhead_rec.frm = biglist.req_frm<br>
INTO TEMP grabname with no log;

SELECT biglist.*, grabname.resp_name<br>
FROM biglist, grabname<br>
ORDER BY prnt_item, account_amt<br>
INTO TEMP xxx with no log;
War es hilfreich?

Lösung

Was Feld würde es passen mit? Übrigens, hier ist, wie sie in einer Reihe aufstellen:

SELECT NULL, NULL, NULL, NULL, MySingleField, NULL, NULL, NULL... FROM #temp
UNION ALL
SELECT Col1, Col2, Col3, Col4, Col5, Col6,... FROM OtherTable

UPDATE:

OK, nach dem Update zu lesen ... Ich glaube nicht, dass Sie eine UNION überhaupt, sondern und unglaublich einfach subselect

SELECT
    *,
    (SELECT TOP 1 Name FROM Blah WHERE Blah.SomeID = MyTable.SomeID) AS ExtraCol
FROM
    MyTable

Andere Tipps

Es klingt wie Sie eine Verknüpfung wollen, keine Gewerkschaft.

Sie brauchen nichts zu vergleichen, eine Verknüpfung zu tun. Sie enden mit einem Kreuzprodukt, wenn Sie keine Join-Bedingung angegeben werden:

SELECT t20.*, t1.*
FROM table_with_20_columns AS t20
  LEFT OUTER JOIN temp_table_with_1_column AS t1 ON (1=1);

Wenn es keine Zeilen in der temporären Tabelle sind, wird es als NULL in dem Ergebnis der obigen Abfrage gemeldet werden.

Wenn es jedoch mehrere Zeilen in der temporären Tabelle sind, werden Sie das Kreuzprodukt mit dem ersten Tisch bekommen. Ich kann nicht von der Frage sagen, was Sie wollen.

Bearbeiten Die Join-Bedingung in der ON oder USING Klausel ausgedrückt sollte entsprechend dem SQL-Standard optional sein, aber zumindest, wie ich es in MySQL testen 5.0, es ist ein Syntaxfehler, dass die Klausel wegzulassen . Aber Sie können ON (1=1) verwenden.

Bearbeiten Wir beantworten Ihre Frage im Kommentar:

SELECT COALESCE(reqhead_rec.resp_name, dflt.resp_name) AS resp_name
FROM (SELECT 'default name' AS resp_name) dflt
  LEFT OUTER JOIN reqhead_rec ON (1=1)
WHERE reqhead_rec.req_no = biglist.req_no AND reqhead_rec.frm = biglist.req_frm 
INTO TEMP grabname WITH NO LOG;

Eigentlich können Sie in der Lage sein, die temporäre Tabelle ganz zu überspringen. Gerade bei Ihrer Haupttabelle JOIN reahead_rec. Setzen Sie diese Bedingungen in die ON Klausel der beizutreten, nicht in der WHERE Klausel. Dann COALESCE() in der Auswahlliste der Abfrage verwenden, um einen Standardnamen zu geben, wenn man nicht in der anderen Tabelle zu finden ist.

SELECT b.*, COALESCE(r.resp_name, 'default name') AS resp_name
FROM biglist AS b
  LEFT OUTER JOIN reqhead_rec AS r
    ON (b.req_no = r.req_no AND r.frm = b.req_frm)
INTO TEMP xxx WITH NO LOG;

Versuchen nvl(NULL,NULL) Auswahl für fehlende Werte

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top