SQL:一个查询中有两个select语句

Ber*_*tov 23 sql select

我想在一个查询中从两个SQL表中选择信息,但信息是不相关的,因此不存在潜在的关节.

一个例子可以是以下设置.

tblMadrid

   id | name    | games | goals
    1 | ronaldo | 100   | 100
    2 | benzema | 50    | 25
    3 | bale    | 75    | 50
    4 | kroos   | 80    | 10
Run Code Online (Sandbox Code Playgroud)

tblBarcelona

   id | name    | games | goals
    1 | neymar  | 60    | 25
    2 | messi   | 150   | 200
    3 | suarez  | 80    | 80
    4 | iniesta | 40    | 5
Run Code Online (Sandbox Code Playgroud)

我想要一个查询,它给我以下内容:

name    | games | goals
messi   | 150   | 200
ronaldo | 100   | 100
Run Code Online (Sandbox Code Playgroud)

我试图遵循这个逻辑:单个查询中的多个select语句,但以下代码不起作用:

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 
Run Code Online (Sandbox Code Playgroud)

对此有何建议?谢谢信息:足球的东西只是一个简化的例子.实际上,不可能将两个表放在一个并且有一个新的"团队"列.这两个表有完全不同的结构,但我需要一些与这个例子的特征相匹配的东西.

Ray*_*ddy 39

你可以这样做:

 (SELECT
    name, games, goals
    FROM tblMadrid WHERE name = 'ronaldo')
 UNION
 (SELECT
    name, games, goals
    FROM tblBarcelona WHERE name = 'messi')
ORDER BY goals;
Run Code Online (Sandbox Code Playgroud)

例如,请参阅:https://dev.mysql.com/doc/refman/5.0/en/union.html

  • 保持in minid,如果使用`UNION`,则需要在`SELECT`中使用相同的tableName,否则会抛出错误. (4认同)

use*_*168 9

如果您希望将记录分开保存,而不要合并。
请在下面尝试查询

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
Run Code Online (Sandbox Code Playgroud)

  • 这里的“DUAL”是什么?它似乎是一个虚拟表,还是? (8认同)

小智 8

UNION 语句是你的朋友:

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;
Run Code Online (Sandbox Code Playgroud)


Wya*_*man 6

只要列匹配,您就可以合并查询。

SELECT name,
       games,
       goals
FROM   tblMadrid
WHERE  id = 1
UNION ALL
SELECT name,
       games,
       goals
FROM   tblBarcelona
WHERE  id = 2 
Run Code Online (Sandbox Code Playgroud)