2015-08-13 20 views
5

Desidero selezionare le informazioni da due tabelle SQL all'interno di una query, tuttavia l'informazione non è correlata, quindi non esistono giunzioni potenziali.SQL: due istruzioni select in una query

Un esempio potrebbe essere il seguente setup.

tblMadrid

id | name | games | goals 
    1 | ronaldo | 100 | 100 
    2 | benzema | 50 | 25 
    3 | bale | 75 | 50 
    4 | kroos | 80 | 10 

tblBarcelona

id | name | games | goals 
    1 | neymar | 60 | 25 
    2 | messi | 150 | 200 
    3 | suarez | 80 | 80 
    4 | iniesta | 40 | 5 

voglio avere una query che mi dà il seguente:

name | games | goals 
messi | 150 | 200 
ronaldo | 100 | 100 

ho cercato di seguire questa logica: Multiple select statements in Single query ma il seguente il codice non funzionava:

USE Liga_BBVA 

SELECT (SELECT name, 
       games, 
       goals 
     FROM tblMadrid 
     WHERE name = 'ronaldo') AS table_a, 
     (SELECT name, 
       games, 
       goals 
     FROM tblBarcelona 
     WHERE name = 'messi') AS table_b 
ORDER BY goals 

Qualche consiglio su questo? Grazie Info: Il materiale del calcio è solo un esempio di semplificazione. In realtà non è possibile inserire entrambi i tavoli in uno e avere una nuova colonna "team". Le due tabelle hanno strutture completamente diverse, ma ho bisogno di qualcosa che corrisponda alle caratteristiche di questo esempio.

risposta

9

si può fare qualcosa di simile:

(select 
    name, games, goals 
    from tblMadrid where name = 'ronaldo') 
union 
(select 
    name, games, goals 
    from tblBarcelona where name = 'messi') 
order by goals; 

See, ad esempio: https://dev.mysql.com/doc/refman/5.0/en/union.html

+1

funziona come un incantesimo con i miei dati. grazie :) – Berbatov

+3

Ronaldo è il migliore .. –

0

È possibile combinare i dati di due tabelle, ordine da obiettivi più caro e quindi scegliere i primi due in questo modo:

MySQL

select * 
from (
    select * from tblMadrid 
    union all 
    select * from tblBarcelona 
) alldata 
order by goals desc 
limit 0,2; 

SQL Server

select top 2 * 
from (
    select * from tblMadrid 
    union all 
    select * from tblBarcelona 
) alldata 
order by goals desc; 

Se vuoi solo Messi e Ronaldo

select * from tblBarcelona where name = 'messi' 
union all 
select * from tblMadrid where name = 'ronaldo' 

Per garantire che Messi è al top del risultato, si può fare qualcosa di simile:

select * from (
    select * from tblBarcelona where name = 'messi' 
    union all 
    select * from tblMadrid where name = 'ronaldo' 
) stars 
order by name; 
+0

penso che la mancanza ordine OP è obiettivi. –

0

È possibile unire le query fino a quando le colonne corrispondono.

SELECT name, 
     games, 
     goals 
FROM tblMadrid 
WHERE id = 1 
UNION ALL 
SELECT name, 
     games, 
     goals 
FROM tblBarcelona 
WHERE id = 2 
-1

È possibile utilizzare UNION in questo caso

select id, name, games, goals from tblMadrid 
union 
select id, name, games, goals from tblBarcelona 

si sono finite devono mantenere l'ordine delle colonne selezionate cioè id, nome, giochi, gol in entrambe le SQLs

2

La dichiarazione Union è la tua amico:

SELECT a.playername, a.games, a.goals 
FROM  tblMadrid as a 
WHERE a.playername = "ronaldo" 
UNION 
SELECT b.playername, b.games, b.goals 
FROM  tblBarcelona as b 
WHERE b.playername = "messi" 
ORDER BY goals; 
0
select name, games, goals 
from tblMadrid where name = 'ronaldo' 
union 
select name, games, goals 
from tblBarcelona where name = 'messi' 
ORDER BY goals 
+0

Anche l'uso di 'UNION ALL' è in genere più veloce poiché non tenta di rimuovere i duplicati. –

0

L'utilizzo di unione aiuterà in questo caso.

È inoltre possibile utilizzare unirsi su una condizione che restituisce sempre vero e non è legato ai dati in questi tables.See sotto

selezionare .name TMD, tbc.goals da tblMadrid TMD uniscono tblBarcelona da confermare il 1 = 1 ;

+0

join ti aiuterà anche nel caso in cui le tabelle non abbiano colonne comuni –

0

Se ti piace tenere separati i record e non fare l'unione.
interrogazione Prova sotto

SELECT (SELECT name, 
       games, 
       goals 
     FROM tblMadrid 
     WHERE name = 'ronaldo') AS table_a, 
     (SELECT name, 
       games, 
       goals 
     FROM tblBarcelona 
     WHERE name = 'messi') AS table_b 
FROM DUAL 
Problemi correlati