2015-08-13 8 views
5

Chcę wybrać informacje z dwóch tabel SQL w jednym zapytaniu, ale informacje nie są ze sobą powiązane, więc nie ma potencjalnych połączeń.SQL: Dwie wyselekcjonowane instrukcje w jednym zapytaniu

Przykładem może być poniższa konfiguracja.

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 

chcę mieć kwerendę, która daje mi następujący:

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

Starałem się śledzić tę logikę: Multiple select statements in Single query ale następujący kod nie zadziałał:

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 

Wszelkie porady na ten temat? Dzięki Info: Piłka nożna to tylko uproszczający przykład. W rzeczywistości nie można umieścić obu tabel w jednym i mieć nową kolumnę "zespół". Dwie tabele mają zupełnie inne struktury, ale potrzebuję czegoś, co pasuje do cech tego przykładu.

Odpowiedz

9

można zrobić coś takiego:

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

widoczny, na przykład: https://dev.mysql.com/doc/refman/5.0/en/union.html

+1

działa jak czar z moimi danymi. dzięki :) – Berbatov

+3

Ronaldo jest najlepszym .. –

0

Można łączyć dane z dwóch tabel, zamów przez cele najwyższa, a potem wybrać dwóch najlepszych takiego:

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; 

Jeśli chcesz tylko Messi i Ronaldo

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

Aby upewnić się, że Messi jest na szczycie rezultacie, można zrobić coś takiego:

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

myślę Kupię OP jest zamówienie cele. –

0

Możesz łączyć zapytania tak długo, jak kolumny są zgodne.

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

Można użyć Unii w tym przypadku

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

jsut trzeba zachować kolejność wybranych kolumn tj id, nazwisko, gry, gole w obu zapytania SQL

2

Oświadczenie UNION jest twój znajomego:

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

Również użycie 'UNION ALL' jest zwykle szybsze, ponieważ nie próbuje usunąć duplikatów. Łączenie –

0

W tym przypadku pomoże użycie union.

Można również użyć przystąpić na warunkach, które zawsze zwraca wartość true i nie jest powiązany z danymi w tych tables.See poniżej

wybierz TMD .name, tbc.goals z tblMadrid TMD dołączyć tblBarcelona TBC na 1 = 1 ;

+0

pomoże Ci nawet w przypadku, gdy tabele nie mają wspólnych kolumn –

0

Jeśli chcesz zachować oddzielne zapisy i nie robić związków.
Spróbuj zapytań poniżej

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