web-dev-qa-db-fra.com

SQL: Deux instructions select dans une requête

Je souhaite sélectionner des informations à partir de deux tables SQL au sein d'une même requête. Ces informations ne sont toutefois pas liées, de sorte qu'aucune articulation potentielle n'existe.

Un exemple pourrait être la configuration suivante.

tblMadrid

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

tblBarcelone

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

Je veux avoir une requête qui me donne les informations suivantes:

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

J'ai essayé de suivre cette logique: Plusieurs instructions de sélection dans une requête unique mais le code suivant ne fonctionnait pas:

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 

Un conseil sur celui-ci? ThanksInfo: Le football n'est qu'un exemple simplificateur. En réalité, il n'est pas possible de mettre les deux tableaux en un et d'avoir une nouvelle colonne "équipe". Les deux tables ont des structures complètement différentes, mais j'ai besoin de quelque chose qui corresponde aux caractéristiques de cet exemple.

15
Berbatov

Vous pouvez faire quelque chose comme ça:

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

Voir, par exemple: https://dev.mysql.com/doc/refman/5.0/en/union.html

29
Ray Kiddy

La déclaration de l’UNION est votre amie:

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

Si vous aimez garder des registres séparés et ne pas faire l'union. 
Essayez la requête ci-dessous

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

Vous pouvez fusionner les requêtes tant que les colonnes correspondent.

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

Vous pouvez combiner les données des deux tables, en commençant par les objectifs les plus élevés, puis choisissez les deux premières comme ceci:

MySQL

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

Serveur SQL

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

Si vous voulez seulement Messi et Ronaldo

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

Pour vous assurer que messi figure en haut du résultat, vous pouvez procéder comme suit:

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

L'utilisation de l'union aidera dans ce cas.

Vous pouvez également utiliser la jointure sur une condition qui renvoie toujours la valeur true et qui n'est pas liée aux données de ces tables.Voir ci-dessous.

sélectionnez tmd .name, tbc.goals à partir de tblMadrid tmd rejoindre tblBarcelona à confirmer sur 1 = 1;

0
Amandeep Singh