it-swarm.com.de

SQL: Zwei select-Anweisungen in einer Abfrage

Ich möchte Informationen aus zwei SQL-Tabellen in einer Abfrage auswählen. Die Informationen sind jedoch nicht miteinander verknüpft, sodass keine potenziellen Verbindungen vorhanden sind.

Ein Beispiel könnte das folgende Setup sein.

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

Ich möchte eine Abfrage haben, die mir Folgendes gibt:

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

Ich habe versucht, dieser Logik zu folgen: Mehrere Select-Anweisungen in Einzelabfrage aber der folgende Code hat nicht funktioniert:

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 

Irgendwelche Ratschläge zu diesem Thema? ThanksInfo: Das Fußballzeug ist nur ein vereinfachendes Beispiel. In der Realität ist es nicht möglich, beide Tabellen in eine zu fassen und eine neue "Team" -Spalte zu haben. Die beiden Tabellen sind völlig unterschiedlich aufgebaut, aber ich brauche etwas, das den Merkmalen dieses Beispiels entspricht.

15
Berbatov

Sie können so etwas tun:

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

Siehe zum Beispiel: https://dev.mysql.com/doc/refman/5.0/de/union.html

29
Ray Kiddy

Die UNION-Aussage ist dein Freund:

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;
4
oxymoron

Wenn Sie die Aufzeichnungen getrennt aufbewahren möchten und keine Vereinigung durchführen 
Versuchen Sie die folgende Abfrage

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
4
user206168

Sie können die Abfragen verbinden, solange die Spalten übereinstimmen.

SELECT name,
       games,
       goals
FROM   tblMadrid
WHERE  id = 1
UNION ALL
SELECT name,
       games,
       goals
FROM   tblBarcelona
WHERE  id = 2 
2
Wyatt Shipman
select name, games, goals
from tblMadrid where name = 'ronaldo'
union
select name, games, goals
from tblBarcelona where name = 'messi'
ORDER  BY goals 
1
Mathusuthanan

Sie können Daten aus den beiden Tabellen kombinieren, indem Sie nach den höchsten Zielen zuerst sortieren und dann die oberen zwei wie folgt auswählen:

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;

Wenn du nur Messi und Ronaldo willst

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

Um sicherzustellen, dass Messi ganz oben auf dem Ergebnis steht, können Sie Folgendes tun:

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

Die Verwendung von Union wird in diesem Fall hilfreich sein.

Sie können auch join für eine Bedingung verwenden, die immer true zurückgibt und sich nicht auf Daten in diesen Tabellen bezieht. Siehe unten

tmd .name, tbc.goals aus tblMadrid auswählen tmd join tblBarcelona tbc on 1 = 1;

0
Amandeep Singh