2017-04-08 18 views
0

構造に同じ2つのテーブルがありますが、実際にそれらの中から欲しいのは、列の結果セット。SQL:複数のテーブルからの集計結果を複数の列に結合する方法

私は構文エラーが発生していますが、これまでのところ、私が必要とするデータを提供するものを手に入れられず、パーサを使ってデータを取得できませんでした。私はこれがSQLの問題かどうかを判断しようとしています(ネイティブのMySQl/SQL/OracleではなくWebサイトの実装を使用していることを考えれば可能です)。

私が望むのは、2つの無関係な(およびプライマリキーなしの)テーブルをCOUNT(DISTINCT列)を1つの結果に戻すことです。私は別のアプローチのカップルを試してみました:

select 1,2 FROM 
    (SELECT COUNT(DISTINCT col1) as 1 from table1), 
    (SELECT COUNT(DISTINCT col2) as 2 from table2) 

SELECT * 
FROM (
    SELECT COUNT(DISTINCT col1) AS 1 
    FROM table1 
    ) 
CROSS JOIN (
    SELECT COUNT(DISTINCT col2) AS 2 
    FROM table2 
    ) 

私もunionの4-5さまざまな用途で周りの混乱している|| union allはご利用いただけません。 SQLの芸術でもっと勉強している人が考えていることが不思議です。ありがとう。

+0

数値にはエイリアスとして許可されていない数字は含まれていませんが、数字ではなく単語で列名を付けてください。 '... as col1 ...'と '... as col2 ... 'を試してください –

+0

私は、カラムエイリアスとして整数リテラルを使うことはできないと思います。 – devio

答えて

1

データベースのRDBMによっては、いくつかの構文が変更される可能性があります。 ANSI SQL定義にクエリは次のようになります。

select col1, col2 FROM 
    (SELECT COUNT(DISTINCT col1) as col1 from table1) as tab1, 
    (SELECT COUNT(DISTINCT col2) as col22 from table2) as tab2 

あなたは、すべてのサブを照会ためaliasを追加する必要があります。また、数字ではなく単語で列に名前を付けると、理解しやすくなります。 SQL ANSIでエイリアスとして数字が許可されていないかどうかはわかりませんが。あなたはこのように使用することができますサブクエリの別名なし

-- For MySql, PostgreSql, SQL Server (not sure though) 
select (SELECT COUNT(DISTINCT col1) 
      from table1) as col1, 
     (SELECT COUNT(DISTINCT col2) as col22 
      from table2) as col2 

-- For Oracle 
select (SELECT COUNT(DISTINCT col1) 
      from table1) as col1, 
     (SELECT COUNT(DISTINCT col2) as col22 
      from table2) as col2 
    from dual 

-- For DB2 
select (SELECT COUNT(DISTINCT col1) 
      from table1) as col1, 
     (SELECT COUNT(DISTINCT col2) as col22 
      from table2) as col2 
    from sysibm.sysdummy1 

サイドノート:あなたはあなたは(これはSQL ANSIと意志である二重引用符"とそれを囲む場合はエイリアスとして番号を使用することができます

select "1", "2" FROM 
    (SELECT COUNT(DISTINCT col1) as "1" from table1) a, --don't forget the table alias 
    (SELECT COUNT(DISTINCT col2) as "2" from table2) b 

MySQLはまた、あなたが戻って使用することができますが、ダニ:

次のように)どこでも仕事
+0

最初の解決法ではダブルエイリアスで混乱しましたが、うまくいきます – devio

+0

@devioこれは、単にCOUNT関数で指定された列の名前の変更です。カウント関数を使用すると、データベース(そのすべて)は同じ名前を取得しません(通常はcount関数を名前として使用します)。したがって、カウントしているカラム名に名前を付けますso)。 –

+1

このラウンドダウンは、私が実際のプラットフォームに移動したときに必要なものに最適でした。 Web実装に掘り下げて(ちょうどコードにアクセスできます)、サブクエリはサポートされていないようです。時間をいただきありがとうございます! – scuttlemonkey

関連する問題