SQL: два оператора select в одном запросе
Я хочу выбрать информацию из двух таблиц SQL в одном запросе, однако информация не связана, поэтому потенциальные суставы не существуют.
Примером может быть следующая настройка.
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
Я хочу получить запрос, который дает мне следующее:
name | games | goals
messi | 150 | 200
ronaldo | 100 | 100
Я попытался следовать этой логике: Несколько операторов 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
Какие-нибудь советы по этому поводу? благодаря
Info: футбол - просто упрощающий пример. В действительности невозможно поставить обе таблицы в одну и иметь новый столбец "команда". Две таблицы имеют совершенно разные структуры, но мне нужно что-то, что соответствует характеристикам этого примера.
Ответы
Ответ 1
Вы можете сделать что-то вроде этого:
(SELECT
name, games, goals
FROM tblMadrid WHERE name = 'ronaldo')
UNION
(SELECT
name, games, goals
FROM tblBarcelona WHERE name = 'messi')
ORDER BY goals;
Смотрите, например: https://dev.mysql.com/doc/refman/5.0/en/union.html
Ответ 2
Если вам нравится вести записи отдельно, а не делать объединение.
Попробуйте выполнить запрос ниже
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
Ответ 3
Заявление 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;
Ответ 4
Вы можете объединять запросы, пока совпадают столбцы.
SELECT name,
games,
goals
FROM tblMadrid
WHERE id = 1
UNION ALL
SELECT name,
games,
goals
FROM tblBarcelona
WHERE id = 2
Ответ 5
select name, games, goals
from tblMadrid where name = 'ronaldo'
union
select name, games, goals
from tblBarcelona where name = 'messi'
ORDER BY goals
Ответ 6
Вы можете комбинировать данные из двух таблиц, сначала заказывать по стартовым целям, а затем выбирать верхние два следующим образом:
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;
Если вы хотите только Месси и Роналду
select * from tblBarcelona where name = 'messi'
union all
select * from tblMadrid where name = 'ronaldo'
Чтобы гарантировать, что messi находится в верхней части результата, вы можете сделать что-то вроде этого:
select * from (
select * from tblBarcelona where name = 'messi'
union all
select * from tblMadrid where name = 'ronaldo'
) stars
order by name;
Ответ 7
Использование объединения поможет в этом случае.
Вы также можете использовать join при условии, которое всегда возвращает true и не связано с данными в этих таблицах. См. ниже
выберите tmd.name, tbc.goals из tblMadrid tmd join tblBarcelona tbc on 1 = 1;
Ответ 8
В этом случае вы можете использовать UNION
select id, name, games, goals from tblMadrid
union
select id, name, games, goals from tblBarcelona
вам нужно поддерживать порядок выбранных столбцов, т.е. идентификатор, имя, игры, цели в обоих SQL.