8
votes

Comment combiner ces requêtes SQL Sélectionnez dans une seule instruction SELECT

Comment puis-je combiner ces deux instructions sélectionnées dans une requête:

fire_neighborhoods  fires  adw_neighborhoods  adw
xyzNeighborhood     6      abcNeighborhood    22
jklNeighborhood     3      tuvNeighborhood    40


6 commentaires

J'ai dû louper quelque chose. Pourquoi ne pouvez-vous pas simplement l'union des deux requêtes ensemble?


Pouvez-vous poster la structure de vos tables?


Et pourquoi les gens ont-ils voté cette question? Cette question est-elle vraiment utile? Cela me semble plutôt académique et superflu pour moi.


@Jim g .: blâmer le badge électorat: Stackoverflow.com/badges/155/electorate


Pourquoi le schéma mappe-t-il une table par an? Sont ces points de vue?


Bonjour Jim, en effet, ils sont des vues. Pour faire une longue histoire courte, il y a du code qui détermine si un incident est dans un quartier. Il court trop lentement. Donc, je l'ai exécuté à l'avance de l'utilisateur le demandant et je l'ai jeté dans ces tables. Ce n'est pas génial, mais ça marche. Je continue d'apprendre. Merci. -Laxmidi


5 Réponses :


2
votes

Si je comprends ce dont vous avez besoin correctement, vous pouvez l'union des requêtes ensemble, en ajoutant une colonne pour vous faire savoir quelle requête elle est venue de: xxx

accordé que vous aurez deux fois plus nombreux. Les lignes et la moitié de vos données seront nuls, mais simplement "claquer" les résultats ainsi que dans votre exemple n'est pas d'habitude.


2 commentaires

Bonjour Aaron, je suppose que je n'ai pas besoin de retourner les données horizontalement. Je pourrais ajouter une colonne qui indiquera s'il s'agit d'un incendie ou d'un ADW, puis des autres colonnes soient de voisinage et d'incidents. -Laxmidi


Bonjour Aaron, j'ai oublié de dire "merci" dans mon message précédent. Pardon. -Laxmidi



3
votes

L'exemple que vous avez donné indique que vous souhaitez combiner les requêtes horizontalement, mais vous avez ensuite indiqué que, ils sont complètement indépendants. Ce sont des déclarations contradictoires car vous combinez normalement des données horizontalement lorsque des enregistrements se rapportent les uns aux autres. Ci-dessous mon idée de les combiner horizontalement, mais je prends également note de mon idée de les combiner verticalement en dessous de cela.

Cela dépend de la manière dont vous voulez les relier. Si vous interrogez sur le quartier, vous pouvez faire une jointure entre les deux plus grandes requêtes sur Fire_neigborhoods = ADW_NEIGHORHOODS, telles que: P>

SELECT fire_neighborhoods, fires, adw
FROM (

SELECT SUM( incidents )  AS fires, neighborhoods AS fire_neighborhoods
FROM (
SELECT * 
FROM `fires_2009_incident_location` 
UNION ALL SELECT * 
FROM `fires_2008_incident_location`
UNION ALL SELECT * 
FROM `fires_2007_incident_location`
UNION ALL SELECT * 
FROM `fires_2006_incident_location`
) AS combo
GROUP BY fire_neighborhoods ORDER BY fires DESC

) AS fires
    INNER JOIN (  

SELECT SUM( incidents )  AS adw, neighborhoods AS adw_neighborhoods
FROM (
SELECT * 
FROM `adw_2009_incident_location` 
UNION ALL SELECT * 
FROM `adw_2008_incident_location`
UNION ALL SELECT * 
FROM `adw_2007_incident_location`
UNION ALL SELECT * 
FROM `adw_2006_incident_location`
) AS combo2
GROUP BY adw_neighborhoods ORDER BY adw DESC

) AS adw
    ON fires.fire_neighborhoods = adw.adw_neighborhoods


1 commentaires

Bonjour Nysystemsanalyste, merci pour la suggestion d'ajouter des colonnes avec des constantes. Je finirai probablement pas ça. -Laxmidi



1
votes

Les réponses données par les autres à l'aide d'une colonne discriminator ressemblent à ce que vous êtes après, mais au cas où, il est possible d'ajouter des colonnes de porte-places factices aux syndicats, comme indiqué ci-dessous:

SELECT 
    SUM( incidents )  AS fires, 
    neighborhoods AS fire_neighborhoods,
    0 as adw,
    '' as adw_neighbourhoods
FROM ( 
    SELECT *  
    FROM `fires_2009_incident_location`  
    UNION ALL SELECT *  
    FROM `fires_2008_incident_location` 
    UNION ALL SELECT *  
    FROM `fires_2007_incident_location` 
    UNION ALL SELECT *  
    FROM `fires_2006_incident_location` 
) AS combo 
GROUP BY fire_neighborhoods ORDER BY fires DESC 

UNION 

SELECT 
    0 as fires,
   '' as fire_neighbourhoods,
    SUM( incidents )  AS adw, 
    neighborhoods AS adw_neighborhoods 
FROM ( 
    SELECT *  
    FROM `adw_2009_incident_location`  
    UNION ALL SELECT *  
    FROM `adw_2008_incident_location` 
    UNION ALL SELECT *  
    FROM `adw_2007_incident_location` 
    UNION ALL SELECT *  
    FROM `adw_2006_incident_location` 
) AS combo2 
GROUP BY adw_neighborhoods ORDER BY adw DESC


2 commentaires

Bonjour David, merci pour le message. J'ai essayé votre suggestion et malheureusement, je ne pouvais pas le faire travailler. Est-il possible d'ajouter des colonnes factices dans MySQL? -Laxmidi


@LAXMIDI - Voyez-vous une erreur lorsque vous exécutez cette syntaxe? Je ne suis pas sûr de MySQL, bien que je m'attends à ce que cela fonctionne. La question de la tournée a été traitée par une personne comme étant TSQL, qui est la mise en œuvre Microsoft SQL, je vais le resserrer maintenant.



0
votes

Affichage de deux requêtes non liées La côte côte à côte est généralement le travail du logiciel de rapport plutôt que du moteur SQL. Le problème ici est que vous demandez à l'outil de requête de faire quelque chose qu'il n'est pas adapté à faire: afficher la mise en forme.

une relation (qui est ce que le résultat d'une sélection est censé être, fondamentalement) est une structure de données qui fait des affirmations sur l'état du monde. Chaque ligne définit une série de propositions qui sont (idéalement) vraies.

Dans votre question, les lignes contiennent des concatinations arbitraires des faits qui ne se rapportent pas les uns aux autres et sur lesquels aucune proposition ne peut être indiquée.


1 commentaires

Salut Jeffrey, tu as raison. Il n'a pas de sens de renvoyer les données horizontalement. Merci -laxmidi



1
votes

Merci pour l'aide pour déterminer cela. Criez-vous à David Hall, Aaron, Jeffrey Whitledge & Nysystemsanalyste. Je suis allé avec l'option de colonne factice: xxx


0 commentaires