我有问题。有两个MySQL查询,也有相同的列和不同的列。我想合并两个查询的结果,我希望结果包含这两个查询的结果的每一列(但同一列仅显示一次)。
我试图解释:
查询1:
SELECT pcs_persons.id AS id_person, pcs_persons.firstname AS firstname,
pcs_persons.lastname AS lastname, pcs_lineup.id_club, pcs_lineup.type, count(case
when pcs_lineup.type = '2' then 1 else NULL end) AS starter, count(case when
pcs_subs.id_person_in = pcs_lineup.id_person AND pcs_lineup.type = '3' then 1 else
NULL end) AS subs
FROM pcs_lineup
JOIN pcs_persons ON pcs_lineup.id_person = pcs_persons.id AND pcs_lineup.id_club = 2
JOIN pcs_matchs ON pcs_lineup.id_match = pcs_matchs.id AND pcs_matchs.id_compet
= 1 AND pcs_matchs.id_season = 1
LEFT JOIN pcs_subs ON pcs_lineup.id_person = pcs_subs.id_person_in
GROUP BY id_person
查询1的结果
+-------------+------------+---------------+----------+-------+----------+------+
| id_person | firstname | lastname | id_club | type | starter | subs |
+-------------+------------+---------------+----------+-------+----------+------+
| 194 | Jesper | Hansen | 2 | 2 | 1 | 0 |
| 195 | Mikkel | Andersen | 2 | 3 | 0 | 0 |
| 197 | Alexander | Scholz | 2 | 2 | 1 | 0 |
| 198 | Erik | Sviatchenko | 2 | 2 | 2 | 0 |
| 199 | Kian | Hansen | 2 | 2 | 1 | 1 |
| 204 | Manjrekar | James | 2 | 3 | 0 | 0 |
| 207 | | Paulinho | 2 | 2 | 1 | 0 |
| 209 | Joel | Andersson | 2 | 2 | 2 | 0 |
| 214 | Jens | Cajuste | 2 | 3 | 0 | 0 |
| 215 | | Evander | 2 | 2 | 1 | 0 |
| 216 | Jakob | Poulsen | 2 | 3 | 0 | 0 |
| 217 | Ayo | Simon Okosun | 2 | 2 | 1 | 0 |
| 225 | Gustav | Wikheim | 2 | 2 | 1 | 0 |
| 226 | Mikael | Anderson | 2 | 3 | 0 | 1 |
| 229 | Awer | Mabil | 2 | 3 | 0 | 1 |
| 230 | Frank | Onyeka | 2 | 2 | 1 | 0 |
| 234 | Artem | Dovbyk | 2 | 3 | 0 | 1 |
| 235 | Júnior | Brumado | 2 | 2 | 1 | 1 |
+-------------+------------+---------------+----------+-------+----------+------+
查询2:
SELECT pcs_persons.id AS id_person, pcs_persons.firstname AS firstname,
pcs_persons.lastname AS lastname, pcs_lineup.id_club, pcs_lineup.type, count(case
when pcs_goals.id_match = pcs_matchs.id AND pcs_goals.id_person =
pcs_lineup.id_person then 1 else NULL end) AS goal
FROM pcs_lineup
JOIN pcs_persons ON pcs_lineup.id_person = pcs_persons.id AND pcs_lineup.id_club = 2
JOIN pcs_matchs ON pcs_lineup.id_match = pcs_matchs.id AND pcs_matchs.id_compet
= 1 AND pcs_matchs.id_season = 1
LEFT JOIN pcs_goals ON pcs_lineup.id_person = pcs_goals.id_person AND
pcs_goals.goal_csc = 0
GROUP BY id_person
查询2的结果
+-------------+------------+---------------+----------+-------+------+
| id_person | firstname | lastname | id_club | type | goal |
+-------------+------------+---------------+----------+-------+------+
| 194 | Jesper | Hansen | 2 | 2 | 0 |
| 195 | Mikkel | Andersen | 2 | 3 | 0 |
| 197 | Alexander | Scholz | 2 | 2 | 0 |
| 198 | Erik | Sviatchenko | 2 | 2 | 1 |
| 199 | Kian | Hansen | 2 | 2 | 0 |
| 204 | Manjrekar | James | 2 | 3 | 0 |
| 207 | | Paulinho | 2 | 2 | 0 |
| 209 | Joel | Andersson | 2 | 2 | 2 |
| 214 | Jens | Cajuste | 2 | 3 | 0 |
| 215 | | Evander | 2 | 2 | 0 |
| 216 | Jakob | Poulsen | 2 | 3 | 0 |
| 217 | Ayo | Simon Okosun | 2 | 2 | 0 |
| 225 | Gustav | Wikheim | 2 | 2 | 0 |
| 226 | Mikael | Anderson | 2 | 3 | 0 |
| 229 | Awer | Mabil | 2 | 3 | 0 |
| 230 | Frank | Onyeka | 2 | 2 | 0 |
| 234 | Artem | Dovbyk | 2 | 3 | 0 |
| 235 | Júnior | Brumado | 2 | 2 | 0 |
+-------------+------------+---------------+----------+-------+------+
我想合并这两个表(我尝试了UNION和UNION ALL,但没有成功)。所需的结果如下:
+-------------+------------+---------------+----------+-------+----------+------+-------+
| id_person | firstname | lastname | id_club | type | starter | subs | goal |
+-------------+------------+---------------+----------+-------+----------+------+-------+
| 194 | Jesper | Hansen | 2 | 2 | 1 | 0 | 0 |
| 195 | Mikkel | Andersen | 2 | 3 | 0 | 0 | 0 |
| 197 | Alexander | Scholz | 2 | 2 | 1 | 0 | 0 |
| 198 | Erik | Sviatchenko | 2 | 2 | 2 | 0 | 1 |
| 199 | Kian | Hansen | 2 | 2 | 1 | 1 | 0 |
| 204 | Manjrekar | James | 2 | 3 | 0 | 0 | 0 |
| 207 | | Paulinho | 2 | 2 | 1 | 0 | 0 |
| 209 | Joel | Andersson | 2 | 2 | 2 | 0 | 2 |
| 214 | Jens | Cajuste | 2 | 3 | 0 | 0 | 0 |
| 215 | | Evander | 2 | 2 | 1 | 0 | 0 |
| 216 | Jakob | Poulsen | 2 | 3 | 0 | 0 | 0 |
| 217 | Ayo | Simon Okosun | 2 | 2 | 1 | 0 | 0 |
| 225 | Gustav | Wikheim | 2 | 2 | 1 | 0 | 0 |
| 226 | Mikael | Anderson | 2 | 3 | 0 | 1 | 0 |
| 229 | Awer | Mabil | 2 | 3 | 0 | 1 | 0 |
| 230 | Frank | Onyeka | 2 | 2 | 1 | 0 | 0 |
| 234 | Artem | Dovbyk | 2 | 3 | 0 | 1 | 0 |
| 235 | Júnior | Brumado | 2 | 2 | 1 | 1 | 0 |
+-------------+------------+---------------+----------+-------+----------+------+-------+
我希望一些专家可以为我提供帮助,因为我不知道该怎么做。非常感谢!
答案 0 :(得分:0)
基于您的两个查询,您执行GROUP BY意味着您要标记每个查询本身就是可靠的结果(每个查询)。 这意味着UNION不是解决方案。
我能想到的最接近的解决方案是将两个查询都包含为源(临时集)
示例:
SELECT ........
FROM ( query1 ) as q1
JOIN ( query2 ) as q2 ON q2.id_person = q1.id_person