1

3 つの異なるテーブルの行数を取得するリクエストを行っています。

したがって、各テーブルの行をカウントするために、3 つの単純なリクエストの間のユニオンを使用します。

しかし、エラーが発生します:「結合操作の構文エラー」

クエリに参加していなくても...

誰でもこれで私を助けることができますか?

そして、ここにリクエストがあります:

Select Sum(asd) as 'totalRows' 
FROM ((Select Count(*) as 'asd' from Machines) 
Union (Select Count(*) as 'asd' from Factures) 
Union (Select Count(*) as 'asd'  From Consommation)) 
 as 'tab1'
4

2 に答える 2

1

あなたが本当に望むものに依存します...複数の列を持つ1つの行、またはそれぞれの数を持つ複数の行。UNION ステートメントは、最初のクエリと同じレコード形式 (つまり、同じ数、列名、およびデータ型) で独自の結果セットを返す独自のクエリであると予想されるため、元のクエリは正しくありませんでした。カウントのみを使用せずにサンプリングするには、次のサンプル構文を使用してください。

select
      a.NumberField1,
      a.CharField1,
      a.DateField1
   from
      SomeTable a
   where
      a.SomeCondition = 1
UNION
      b.SomeField AS NumberField1,
      b.AnotherField AS CharField1,
      c.SomeDate AS DateField1
   from
      AnotherTable b
   where
      b.TestCondition = 6

上記は、「SomeTable」からのすべての行をその条件とともに返し、その条件に基づいて「AnotherTable」からの行を含めます。重複がある場合、重複は削除されます...「UNION ALL」を実行しない限り。ただし、union はそれ自体が select ステートメントであることに注意してください。

さて、あなたに戻りましょう。(括弧)でラップされているために失敗したかどうか/理由はわかりませんが、次のように試行されます

Select 
      Sum(asd) as 'totalRows' 
   FROM 
   (   Select Count(*) as 'asd' 
          from Machines
       UNION ALL
       Select Count(*) as 'asd' 
          from Factures
       UNION ALL
       Select Count(*) as 'asd'  
          From Consommation ) as 'tab1'

私はユニオンオールに変更します...マシンからのカウントとFacturesからのカウントが両方とも175であるとします...元のエントリの1つだけが返され、カウントが正しくないことを知って頭を悩ませます。 .. 偶然にも 3 つのソースすべてのカウントが同じ 175 だった場合は、再試行してください...単一の 175 レコードのみが返され、予想よりもさらにずれます。

于 2013-01-18T13:44:22.570 に答える
0

リクエストを変更することでこれを解決しました。現在は次のとおりです。

Select (Select Count() from Machines) as cntMachines, 
    (Select Count() From Factures) as cntFactures, 
    (Select Count(*) from Consommation) as cntConsommation 
From [Machines Or any other table]

それは私の質問への答えではありませんが、ウォークアラウンドです。

本当の答えはまだありがたいです。:)

于 2013-01-18T13:09:42.940 に答える