2009-02-05 18 views
8

Ich versuche, eine Sicht für die folgende Abfrage zu erstellen.Erstellen von MySQL View mit UNION

SELECT DISTINCT 
    products.pid  AS id, 
    products.pname  AS name, 
    products.p_desc  AS description, 
    products.p_loc  AS location, 
    products.p_uid  AS userid, 
    products.isaproduct AS whatisit 
FROM products 
UNION 
SELECT DISTINCT 
    services.s_id  AS id, 
    services.s_name  AS name, 
    services.s_desc  AS description, 
    services.s_uid  AS userid, 
    services.s_location AS location, 
    services.isaservice AS whatisit 
FROM services 

Aber nicht dazu in der Lage. Ich benutze MySql Query Browser. Der Fehler, den ich erhalte ist:

A view can only be created from an active resultset of SELECT command

Kann mir bitte jemand dabei helfen?

+0

, was der Fehler ist, dass Sie – Dheer

+0

bekommen Ich verwende MySQL Query Browser Der Fehler, den ich bekommen habe ist: Ein Blick nur von einem aktiven resultset erstellt werden kann SELECT-Befehl –

+0

@gnanesh: Sorry über die Bearbeitung Ihrer Post * zweimal *. Ich hätte den Kommentar früher mit der Fehlermeldung sehen sollen. – Tomalak

Antwort

3

Sie können die Reihenfolge von Benutzer-ID und Standort in der zweiten Auswahl ändern. Die Spaltennamen sollten in allen Selektionen der Union mit 1 zu 1 übereinstimmen.

EDIT: Für Abfrage-Browser, wie this herausstellt "Um eine Sicht von einer Abfrage zu erstellen, müssen Sie die Abfrage erfolgreich ausgeführt haben. Um genauer zu sein, wird die Sicht aus der letzten erfolgreich ausgeführten Abfrage nicht unbedingt erstellt die Abfrage befindet sich derzeit im Abfragebereich "

so müssen Sie die Abfrage zuerst ausführen, bevor Sie die Ansicht im Abfrage-Browser erstellen.

Der Fehler ist aus dem Abfrage-Browser und nicht mysql.

+0

Versucht, dass ... Das gleiche Ergebnis –

+0

@Learning, versuchen Sie diese Vorschläge? Ich musste die Abfrage nicht zuerst ausführen. Ich habe eine andere Abfrage ausgeführt, dann "CREATE VIEW ..." ausgeführt und es hat gut funktioniert. – dkretz

+0

Nein, ich bin nicht. Ich habe keinen Zugriff auf mysql. Ich versuche nur zu helfen. – Learning

1

Sie haben verschiedene Typen, die in derselben Spalte zusammengefasst sind. (Die Namen können unterschiedlich sein, aber die Typen müssen gleich oder zumindest automatisch umsetzbar sein.) Aber wie @Learning darauf hinweist, sieht es so aus, als hätten Sie die SELECT-Spaltenaufzählungen verdreht.

Nur für den Fall, die richtige Syntax (die für mich gearbeitet) ist

CREATE VIEW myView 
AS 
SELECT ... 
+0

Wenn Spaltennamen unterschiedlich sind, welcher Spaltenname würde gemeldet werden, wenn wir eine * aus der Ansicht auswählen? – Learning

+0

Der erste. Probieren Sie es aus und sehen Sie (was ist, was ich getan habe.) – dkretz

+0

Der UNION Teil funktioniert gut .. Aber ich versuche, eine Sicht für diese UNION zu erstellen. Ich erhalte den folgenden Fehler: Eine Ansicht kann nur aus einem aktiven Resultset des SELECT-Befehls erstellt werden Ich benutze MySql-Abfrage-Browser –

0

Die Fehlermeldung in "QueryBrowser.pas" ist ein Teil des mysql-gui-tools.

Es wird ausgelöst, indem a) keine aktive Ergebnismenge und b) die Abfrage den falschen Typ hat.

Macht das Entfernen der "DISTINCT" einen Unterschied? In jedem Fall ist dies ein Fehler in QueryBrowser und nicht in einem MySQL. Das Erstellen der Ansicht direkt in MySQL sollte als Workaround ausreichen.

5
CREATE VIEW vw_product_services AS 
SELECT DISTINCT products.pid AS id, 
       products.pname AS name, 
       products.p_desc AS description, 
       products.p_loc AS location, 
       products.p_uid AS userid, 
       products.isaproduct AS whatisit 
      FROM products 
      UNION 
      SELECT DISTINCT services.s_id AS id, 
       services.s_name AS name, 
       services.s_desc AS description, 
       services.s_uid AS userid, 
       services.s_location AS location, 
       services.isaservice AS whatisit 
      FROM services 

Ich habe es versucht und es hat funktioniert! Danke an alle :)

1

Nur eine kleine Bemerkung über UNION. UNION gibt nur die eindeutigen Werte der Ergebnismenge zurück. Es ist also nicht notwendig, SELECT DISTINCT in Verbindung mit einer UNION zu verwenden. Wahrscheinlich besser für die Leistung, um auch DISTINCT nicht zu verwenden.

Weitere Informationen über UNION finden Sie hier: link text