2016-10-08 6 views
1

私は2つのクエリを持っていますが、ほとんど同じですが、決して少なくありません。異なる意味と値を持つように別々に扱われなければならず、それらを1つのビューに結合する必要があります。UNION、一つのテーブルにまとめ、私が欲しいものではありませんこれは、私はそれらを1つのビュー下完全に別のテーブルのように見えるしたいと思い、ここに私がやったことです:入れ子になった2つのMySQLクエリを1つのビューに結合するにはどうすればよいですか?

CREATE VIEW TEAM_SUMMARY AS 
SELECT DISTINCT COUNTRY.country_name AS CountryName_T1,count(Team1)AS NoOfGames, 
    SUM(Team1_score) AS TotalGoalsFor,SUM(Team2_score) AS TotalGoalsAgainst 
    FROM COUNTRY,MATCH_RESULTS WHERE 
    country_name = Team1 
    group by country_name 


    UNION 

SELECT DISTINCT COUNTRY.country_name AS CountryNameT_2,count(Team2)AS NoOfGames, 
    SUM(Team2_score) AS TotalGoalsFor,SUM(Team1_score) AS TotalGoalsAgainst 
    FROM COUNTRY,MATCH_RESULTS WHERE 
    country_name = Team2 
    group by country_name; 

UPDATE: だから、の出力現在のクエリは次のようなものです:

mysql> SELECT * FROM TEAM_SUMMARY; 
+----------------------+-----------+---------------+-------------------+ 
| CountryName   | NoOfGames | TotalGoalsFor | TotalGoalsAgainst | 
+----------------------+-----------+---------------+-------------------+ 
| Algeria    |   1 |    1 |     1 | 
| Argentina   |   4 |    5 |     1 | 
| Australia   |   2 |    2 |     6 | 
| Belgium    |   3 |    5 |     2 | 
| Bosnia & Herzegovina |   1 |    3 |     1 | 
| Brazil    |   6 |    7 |    13 | 
| Cameroon    |   2 |    1 |     8 | 
| Chile    |   1 |    3 |     1 | 
| Columbia    |   3 |    7 |     1 | 
| Costa Rica   |   2 |    1 |     1 | 
| Croatia    |   1 |    1 |     3 | 
| Ecuador    |   1 |    0 |     0 | 
| England    |   1 |    1 |     2 | 
| France    |   3 |    5 |     1 | 
| Germany    |   4 |    9 |     3 | 
| Ghana    |   1 |    1 |     2 | 
| Greece    |   1 |    2 |     1 | 
| Honduras    |   2 |    1 |     5 | 
| Iran     |   1 |    0 |     0 | 
| Italy    |   2 |    0 |     2 | 
| Ivory Coast   |   1 |    2 |     1 | 
| Japan    |   2 |    1 |     4 | 
| Mexico    |   1 |    1 |     0 | 
| Netherlands   |   4 |    4 |     1 | 
| Nigeria    |   2 |    3 |     3 | 
| Portugal    |   1 |    2 |     1 | 
| Russia    |   1 |    1 |     1 | 
| South Korea   |   2 |    2 |     5 | 
| Spain    |   2 |    1 |     7 | 
| Switzerland   |   2 |    4 |     6 | 
| Uruguay    |   2 |    3 |     4 | 
| USA     |   2 |    2 |     3 | 
| Algeria    |   3 |    6 |     6 | 
| Argentina   |   3 |    3 |     3 | 
| Australia   |   1 |    1 |     3 | 
| Belgium    |   2 |    1 |     1 | 
| Bosnia & Herzegovina |   2 |    1 |     3 | 
| Brazil    |   1 |    4 |     1 | 
| Cameroon    |   1 |    0 |     1 | 
| Chile    |   3 |    3 |     3 | 
| Columbia    |   2 |    5 |     3 | 
| Costa Rica   |   3 |    4 |     1 | 
| Croatia    |   2 |    5 |     3 | 
| Ecuador    |   2 |    3 |     3 | 
| England    |   2 |    1 |     2 | 
| France    |   2 |    5 |     2 | 
| Germany    |   3 |    9 |     1 | 
| Ghana    |   2 |    3 |     4 | 
| Greece    |   3 |    1 |     4 | 
| Honduras    |   1 |    0 |     3 | 
| Iran     |   2 |    1 |     4 | 
| Italy    |   1 |    2 |     1 | 
| Ivory Coast   |   2 |    2 |     4 | 
| Japan    |   1 |    1 |     2 | 
| Mexico    |   3 |    4 |     3 | 
| Netherlands   |   3 |   11 |     3 | 
| Nigeria    |   2 |    0 |     2 | 
| Portugal    |   2 |    2 |     6 | 
| Russia    |   2 |    1 |     2 | 
| South Korea   |   1 |    1 |     1 | 
| Spain    |   1 |    3 |     0 | 
| Switzerland   |   2 |    3 |     1 | 
| Uruguay    |   2 |    1 |     2 | 
| USA     |   2 |    3 |     3 | 
+----------------------+-----------+---------------+-------------------+ 
64 rows in set (0.01 sec) 

UPDATE2:各クエリは32行を提供し、ここでは64行に結合されているため、どのクエリにどのクエリが属するかわからない場合は、USAが各クエリの最後の行であることがわかりますAlgeria再度、列の説明を表していない異なる値を持つ2番目のクエリ。私が欲しいもの

はこのようなものです:

+------+--------+ +------+--------+ 
| code | SUM(*) | | code | SUM(*) | 
+------+--------+ +------+--------+ 
| AAA |  4 | | AAA |  4 | 
| BBB |  3 | | CCC |  1 | 
+------+--------+ +------+--------+ 

それから私は、このシナリオがあまり複雑で私よりあるとことができませんでした、ここにCombine results of two unrelated queries into single view示すようJOINを使用するためには、いくつかの検索をしましたが、私のシナリオ、どんなアイデアにも適用しますか?

+0

「1つのビューの下にあるテーブルを完全に分離する」とはどういう意味ですか?いくつかのサンプルデータを提供し、その結果のビューがどのように表示されるかを説明できますか? – Mureinik

+0

質問を編集し、サンプルデータと希望の結果を提供してください。 –

+0

@ Mureinik、@ Gordon Linoff .... done – aero

答えて

2

1つのビューでは商品が見つかりません2つの結果セット。

CREATE VIEW TEAM_SUMMARY AS 
    SELECT 'Team1' as which, 
      c.country_name AS CountryName_T1, count(Team1) AS NoOfGames, 
      SUM(Team1_score) AS TotalGoalsFor, 
      SUM(Team2_score) AS TotalGoalsAgainst 
    FROM COUNTRY c JOIN 
     MATCH_RESULTS mr 
     ON c.country_name = mr.Team1 
    GROUP BY country_name 
    UNION ALL 
    SELECT 'Team2' as which, 
      c.country_name AS CountryNameT_2, 
      count(Team2) AS NoOfGames, 
      SUM(Team2_score) AS TotalGoalsFor, 
      SUM(Team1_score) AS TotalGoalsAgainst 
    FROM COUNTRY c JOIN 
     MATCH_RESULTS mr 
     ON c.country_name = mr.Team2 
    GROUP BY country_name; 

注:彼らはどこから来たしかし、あなたは確認することができます。GROUP BY

  • SELECT DISTINCTは、ほとんど不要である(この場合のよう
  • を使用UNION ALLデフォルトではときにのみUNIONを使用しています。特に重複を削除するためのオーバーヘッドが発生します。
  • テーブルのエイリアスを使用すると、クエリの書き込みと読み込みが簡単になります。
  • 上記は、各行がどこから来るかを指定するために列whichを追加します。
+0

すごくうれしくありがとう – aero

関連する問題