Visualizzazione dei risultati da 1 a 9 su 9

Discussione: [MySQL 3] INTERSECT

  1. #1

    [MySQL 3] INTERSECT

    Premetto che sono un neofita di DB. Sto studiando sul libro e imparando sul campo.
    Ho scoperto che la versione di MySQL (3.23.46) su cui mi tocca lavorare al momento, non supporta gli INTERSECT.
    Come faccio per intersecare il risultato di 2 query su due tabelle diverse?

    SELECT *
    FROM schede_agenzie
    WHERE (stato='a')
    INTERSECT
    SELECT *
    FROM schede_persone
    WHERE (stato='a')

    Queste sarebbe la mia idea (tanto per intenderci), ma l'intersect non funge per la ragione sopra menzionata.
    Non posso purtroppo aggiornare la versione di MySQL e mi serve di combinare i risultati di quelle due query.

    Qualche idea?

    ciauz,
    Ale
    Moderatore di me stesso
    LAVORICREATIVI.COM - ANNUNCI PER CREATIVI e AGENZIE
    SNOWTURA.COM - UNDER CONSTRUCTION

  2. #2
    Mysql e' fermo ad UNION. Niente INTERSECT, manco nelle rel. 5

    Fai due queries oppure prova con una tabella temporanea. Qualcosa del genere:
    codice:
    create temporary table temp
    select * from schede_agenzie
    where stato = 'a';
    
    insert into temp
    select * from schede persone
    where stato = 'a';
    
    select * from temp;

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Scusa piero, ma con le query che hai suggerito non stai simulando una UNION?

    Infatti mi sembra che
    1. Crei la tabella temp mettendoci le righe di schede_agenzie dove stato='a'
    2. Inserisci sempre in temp le schede_persone dove stato='a'

    Capisco che rispondere a un post alle 2 di notte possa farti accusare il colpo anche a te....

    Ciaooo

    PS: snow, puoi postare la struttura delle due tabelle di cui vuoi fare l'intersect?
    <<E' una decisione molto importante. Pensaci bene, Ataru!>>
    <<STOLTO! Non lo sai che io AGISCO SEMPRE PRIMA DI PENSARE???>>

  4. #4
    Originariamente inviato da Moroboshi
    Scusa piero, ma con le query che hai suggerito non stai simulando una UNION?

    Capisco che rispondere a un post alle 2 di notte possa farti accusare il colpo anche a te....

    Ciaooo
    Ti ringrazio per la tua preoccupazione, ma credo ti sia sfuggita la versione di MySQL disponibile a snowtura.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Ok, forse avro' la guidozzite (niente query annidate del tipo select * from pippo where descrizione in (select descrizione from pluto) ), pero' facendo girare il tuo codice:

    1. Creo un db popolato:
    codice:
    create table schede_agenzie(descrizione varchar(10), stato char(1));
    
    create table schede_persone(descrizione varchar(10), stato char(1));
    
    insert into schede_agenzie values('uno','a');
    insert into schede_agenzie values('due','a');
    insert into schede_agenzie values('tre','b');
    insert into schede_agenzie values('quattro','c');
    
    insert into schede_persone values('uno','a');
    insert into schede_persone values('due','a');
    insert into schede_persone values('tre','b');
    insert into schede_persone values('quattro','a');
    lancio il tuo codice:

    codice:
    create temporary table temp
    select * from schede_agenzie
    where stato = 'a';
    
    insert into temp
    select * from schede_persone
    where stato = 'a';
    
    select * from temp;
    ottengo:
    codice:
    +-------------+-------+
    | descrizione | stato |
    +-------------+-------+
    | uno         | a     |
    | due         | a     |
    | uno         | a     |
    | due         | a     |
    | quattro     | a     |
    +-------------+-------+
    che non e' proprio una intersect..... puoi chiarirmi altrimenti cosa intendevi? :master:
    <<E' una decisione molto importante. Pensaci bene, Ataru!>>
    <<STOLTO! Non lo sai che io AGISCO SEMPRE PRIMA DI PENSARE???>>

  6. #6
    UNION e' implementato dalla versione 4.0.0

    Il "nostro" ha la versione 3.23.46.

    Hai ragione sul fatto che era tardi ed ero assonnato. Infatti per imitare correttamente una UNION bisogna raggruppare (distinct o group by) i risultati perche' le tuple identiche in una UNION verrebbero sovrascritte.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    ... quindi concludiamo dicendo a chi ha aperto questo thread che dovrebbe eseguire le due query separatamente e simulare una intersect tramite php ?!
    <<E' una decisione molto importante. Pensaci bene, Ataru!>>
    <<STOLTO! Non lo sai che io AGISCO SEMPRE PRIMA DI PENSARE???>>

  8. #8
    Originariamente inviato da piero.mac
    Mysql e' fermo ad UNION. Niente INTERSECT, manco nelle rel. 5

    Fai due queries oppure prova con una tabella temporanea. Qualcosa del genere:
    codice:
    create temporary table temp
    select * from schede_agenzie
    where stato = 'a';
    
    insert into temp
    select * from schede persone
    where stato = 'a';
    
    select * from temp;
    puoi essere un pochino più chiaro xkè non riesco a capire questa query...
    Moderatore di me stesso
    LAVORICREATIVI.COM - ANNUNCI PER CREATIVI e AGENZIE
    SNOWTURA.COM - UNDER CONSTRUCTION

  9. #9
    Originariamente inviato da snowtura
    puoi essere un pochino più chiaro xkè non riesco a capire questa query...
    Semplicemente:

    siccome non hai disponibile ne UNION ne INTERSECT devi per forza di cose fare piu' query. Hai due modi.

    1) fare due query, mettere i dati in un array (lo stesso), eliminare i doppioni risultanti.

    2) crei una tabella temporanea (i comandi li hai) la popoli con il risultato filtrato delle due tabelle, ed estrai i dati (con distinct)
    Questo e' praticamente quello che farebbe UNION.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.