2009-02-05 12 views
8

Sto cercando di creare una vista per la seguente query.Creazione di MySQL View mediante 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 

Ma non in grado di farlo. Sto usando il browser di query MySql. L'errore che sto ottenendo è:

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

Qualcuno può aiutarmi con questo?

+0

qual è l'errore che si stanno ottenendo – Dheer

+0

Sto usando MySQL Query Browser L'errore che sto ottenendo è: Un punto di vista può essere creato solo da un gruppo di risultati attiva di SELEZIONA il comando –

+0

@gnanesh: Mi dispiace per la modifica del tuo post * due volte *. Avrei dovuto vedere il commento con il messaggio di errore in precedenza. – Tomalak

risposta

3

È possibile ruotare l'ordine di ID utente e posizione nella seconda selezione. I nomi delle colonne devono corrispondere a 1 a 1 in tutte le selezioni dell'unione.

EDIT:. Per Query Browser, come this sottolinea "Per creare una vista da una query, è necessario aver eseguito la query con successo per essere più precisi, la vista viene creata dalle ultime query eseguita con successo, non necessariamente da la query attualmente nell'area di query "

quindi è necessario eseguire la query prima di creare la vista nel browser di query.

L'errore è dal browser di query e non da mysql.

+0

Provato che ... Stesso risultato –

+0

@Learning, stai provando questi suggerimenti? Non ho avuto bisogno di eseguire prima la query. Ho eseguito qualche altra query, poi eseguito "CREATE VIEW ..." e ha funzionato bene. – dkretz

+0

no, non lo sono. Non ho accesso a mysql. Sto solo cercando di aiutare. – Learning

1

Hai diversi tipi di unione nella stessa colonna. (I nomi possono essere diversi, ma i tipi devono essere uguali, o almeno auto-calcinabili.) Ma come sottolinea @Learning, sembra che tu abbia distorto le enumerazioni delle colonne SELECT.

Solo nel caso, la sintassi corretta (che ha lavorato per me) è

CREATE VIEW myView 
AS 
SELECT ... 
+0

se i nomi delle colonne sono diversi quale nome della colonna verrebbe segnalato quando selezioniamo * dalla vista? – Learning

+0

Il primo. Provalo e vedi (che è quello che ho fatto.) – dkretz

+0

La parte UNION sta funzionando bene .. Ma io quando provo a creare una vista per questa UNIONE. Sto ottenendo il seguente errore: Una vista può essere creata solo da un gruppo di risultati attivo del comando SELECT I amd using MySql query browser –

0

Il messaggio di errore è "QueryBrowser.pas", parte della mysql-gui-tools.

procedure TQueryBrowserForm.SQLCreateViewClick(Sender: TObject); 
// ... 
begin 
    if Assigned(ActiveResultset) and (ActiveResultset.ResultSet.query.query_type = MYX_QT_SELECT)then 
    // ... 
    else 
    ShowError('Creation error', _('A view can only be created from a active resultset of SELECT command.'), []); 
end; 

Si è innescato da a) non avere un risultato attivo set e b) la query con il tipo sbagliato.

La rimozione di "DISTINCT" fa alcuna differenza? In ogni caso, questo è un bug in QueryBrowser, piuttosto che un MySQL. Creare la vista direttamente in MySQL dovrebbe essere sufficiente come soluzione.

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 

Ho provato questo e ha funzionato! Grazie a tutti :)

1

Solo una piccola osservazione su UNION. UNION restituisce solo i valori distinti del tuo gruppo di risultati. Quindi non è necessario utilizzare SELECT DISTINCT combinato con UNION. Probabilmente è meglio per le prestazioni non usare DISTINCT troppo.

Maggiori informazioni UNION può essere trovato qui: link text