2016-04-15 2 views
1

Ich habe Schwierigkeiten, diese MySQL-Abfrage zu arbeiten. Ich habe zwei Tabellen:Anwenden von WHERE-Klausel, wenn Sie eine UNION tun

Tabelle 1

TYPE | NAME | LAT | LON | ICON 

Tabelle 2

ID | UID | NAME | LAT | LON | ICON 

Ich versuche, alle Ergebnisse aus Tabelle 1 zu wählen, und wählen Sie nur einige Ergebnisse aus Tabelle 2. Ich versuche, Wenden Sie eine WHERE Klausel auf Tabelle 2 an, aber es scheint nicht zu funktionieren.

Ich lese die Dokumentation und sagte für eine UNION zu arbeiten, die Anzahl der Spalten müssen gleich sein. Wie kann ich dann nur die gleiche Anzahl an Spalten aus beiden Tabellen auswählen, die zurückgegeben werden, aber die zweite Tabelle nach einer Spalte filtern, die nur in dieser Tabelle gefunden wird?

Meine (pseudo) Frage:

(SELECT name,lat,lon,icon 
FROM Table1) 

UNION 

(SELECT name,lat,lon,icon 
FROM Table2 
WHERE uid ="1") 
+0

was ist das Ergebnis, dass Ihre –

+0

Ihre Abfrage sollte funktionieren, wie beide select hat die gleiche Nr. von Spalten ... was ist das Problem? –

+0

@ KP. Ich möchte alle Ergebnisse aus Tabelle 1 und nur Ergebnisse aus Tabelle 2, wo uid ist 1. –

Antwort

1
SELECT * FROM table1 
UNION 
SELECT 
    NULL AS `type`, 
    `name`, 
    `lat`, 
    `long`, 
    `icon` 
FROM table2 WHERE uid = 1 

http://www.sqlfiddle.com/#!9/0a942/8

Dies wählt alles aus Tabelle 1, und nur dort, wo uid = 1 von table2.

Ein UNION kann nur ausgeführt werden, wenn beide Zeilensätze genau die gleichen Spalten haben. Da es keine type Spalte in table2 gibt, wählen wir eine NULL und benennen sie type, so dass wir die UNION tun können.

+0

Es funktioniert! Ich muss mehr über 'NULL AS 'TYPE' lesen! Ich danke dir sehr! Danke, dass du es mir auch erklärt hast :) –

+0

Ja, es ist wie 'SELECT' was auch immer-Wert 'AS' was-pseudo-Spaltenname 'ist praktisch mit Union und verschiedenen Tabellen: D – Sharky

+0

Macht Sinn :) –

Verwandte Themen