2009-02-05 20 views
8

Próbuję utworzyć widok dla następującego zapytania.Tworzenie widoku MySQL przy użyciu 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 

Ale nie można tego zrobić. Używam przeglądarki zapytań MySql. Otrzymuję błąd:

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

Czy ktoś może mi w tym pomóc?

+0

co jest błąd otrzymujesz – Dheer

+0

Używam przeglądarki MySQL Query Błąd otrzymuję to: Widok można utworzyć tylko z aktywnego wynikowego z Polecenie SELECT: –

+0

@gnanesh: Przepraszam za dwukrotne edytowanie Twojego * posta *. Powinienem był zobaczyć komentarz z komunikatem o błędzie wcześniej. – Tomalak

Odpowiedz

3

Możesz chcieć zmienić kolejność identyfikatora użytkownika i lokalizacji w drugim wyborze. Nazwy kolumn powinny pasować od 1 do 1 we wszystkich wybranych związkach.

EDYCJA: Dla przeglądarki zapytań, jako this wskazuje: "Aby utworzyć widok z kwerendy, trzeba było pomyślnie wykonać kwerendę. Aby być bardziej precyzyjnym, widok jest tworzony z najnowszego pomyślnie wykonanego zapytania, niekoniecznie z zapytanie znajdujące się obecnie w obszarze zapytania "

, więc należy wykonać zapytanie przed utworzeniem widoku w przeglądarce zapytań.

Błąd pochodzi z przeglądarki zapytań, a nie mysql.

+0

Wypróbowałem, że ... Ten sam wynik: –

+0

@Learning, próbujesz tych sugestii? Nie musiałem najpierw wykonywać kwerendy. Wykonałem inne zapytanie, a następnie wykonałem polecenie "CREATE VIEW ..." i wszystko działało dobrze. – dkretz

+0

Nie, nie jestem. Nie mam dostępu do mysql. Próbuję tylko pomóc. – Learning

1

Masz różne typy łączone w tej samej kolumnie. (Nazwy mogą być różne, ale typy muszą być takie same, lub przynajmniej automatyczne wyrzucanie.) Jednak, jak zauważa @Learning, wygląda na to, że wykreśliłeś wyliczenia kolumn SELECT.

Tylko w przypadku, właściwa składnia (który pracował dla mnie) jest

CREATE VIEW myView 
AS 
SELECT ... 
+0

jeśli nazwy kolumn są różne, jaka nazwa kolumny byłaby zgłaszana, gdy robimy zaznaczenie * z widoku? – Learning

+0

Pierwsza. Wypróbuj i zobacz (co zrobiłem.) – dkretz

+0

Część UNION działa dobrze ... Ale kiedy próbuję stworzyć widok dla tej UNII. Otrzymuję następujący błąd: Widok można utworzyć tylko z aktywnego zestawu wyników polecenia SELECT Używam przeglądarki zapytań MySql –

0

Komunikat o błędzie jest w „QueryBrowser.pas”, część z 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; 

Jest wywoływany przez a) brak aktywnego zestawu wyników i b) zapytanie o niewłaściwym typie.

Czy usunięcie "DISTINCT" ma znaczenie? W każdym razie jest to błąd w QueryBrowser, a nie w jednym MySQL. Tworzenie widoku bezpośrednio w MySQL powinno wystarczyć jako obejście.

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 

Próbowałem tego i zadziałało! Dziękuję wszystkim :)

1

Tylko mała uwaga o UNII. UNION zwraca tylko różne wartości twojego zestawu wyników. Tak więc nie ma potrzeby używania SELECT DISTINCT w połączeniu z UNION. Prawdopodobnie lepiej dla wydajności, aby nie używać DISTINCT.

Więcej informacji o Unii można znaleźć tutaj: link text

Powiązane problemy