0

Access 2010に複雑なクエリがあります。ここで、query1はクエリWHERE field1 <> 8であり、query2は同じクエリWHERE field1=8です。

それから私はやっています:

SELECT * FROM query1 
INNER JOIN query2 ON query1.field2=query2.field2 
WHERE query1.field3=query2.field3

これは0の結果を返します。

ただし、次のように変更すると、次のようになります。

SELECT * from query1 
INNER JOIN query2 ON query1.field2=query2.field2 
WHERE query1.field3=5 AND query2.field3=5

結果は出ます。これは誰にとっても意味がありますか?テキストフィールドと見なされるフィールドの1つと関係があるのでしょうか。引用符なしで動作することを除いて、なぜそうなるのかわかりません。

これを見たことがあるかどうか教えてください。

これは完全なクエリです:

SELECT *
FROM   (SELECT [transactions by category].[categoryid],
           Month([account transactions].[transaction date]) AS TransMonth,
           Year([account transactions].[transaction date])  AS TransYear,
           SUM([transactions by category].[amount])         AS Amount
    FROM   (categories
            INNER JOIN [transactions by category]
                    ON categories.id =
           [transactions by category].categoryid)
           INNER JOIN [account transactions]
                   ON [transactions by category].transactionid =
                      [account transactions].id
    WHERE  [account transactions].[transaction type] <> 8
    GROUP  BY [transactions by category].[categoryid],
              Year([account transactions].[transaction date]),
              Month([account transactions].[transaction date])) AS
   TransactionCredits
   INNER JOIN (SELECT [transactions by category].[categoryid],
                      Month([account transactions].[transaction date]) AS
                                         TransMonth,
                      Year([account transactions].[transaction date])  AS
                      TransYear
                                         ,
                      SUM(
          [transactions by category].[amount])
               FROM   (categories
                       INNER JOIN [transactions by category]
                               ON categories.id =
   [transactions by category].categoryid)
                      INNER JOIN [account transactions]
                              ON [transactions by category].transactionid =
                                 [account transactions].id
               WHERE  [account transactions].[transaction type] = 8
               GROUP  BY [transactions by category].[categoryid],
                         Year([account transactions].[transaction date]),
                         Month([account transactions].[transaction date]))
              AS
                                 TransactionDebits
           ON TransactionCredits.[categoryid] =
              TransactionDebits.[categoryid]
WHERE  TransactionCredits.transyear = TransactionDebits.transyear
   AND TransactionCredits.transmonth = 8
   AND TransactionDebits.transmonth = 8; 
4

1 に答える 1

0

だから、私はこれについて何ヶ月も壁に頭をぶつけてきました。私はついに解決策を見つけましたが、なぜこれが機能するのか完全には理解していません。

ただ言う代わりに

 SELECT * 
 FROM query1 
 INNER JOIN query2 ON query1.field2=query2.field2 
 WHERE query1.field3=query2.field3"

WHERE句を次のように変更しました

VAL(query1.field3)=VAL(query2.field3)

これらのフィールドは両方とも元々整数ID列でしたが、明らかにそれらの1つがクエリの1つのどこかで何らかのテキストフィールドになりました。

これがどのように機能するかについての説明を聞きたいと思います。

ありがとう

于 2012-07-30T00:24:50.820 に答える