2012-07-29 26 views
0

不工作条款我在Access 2010中一个复杂的查询: QUERY1是一个查询的WHERE field1的<> 8 和 QUERY2是同一个查询的WHERE字段1 = 8。Access 2010中的WHERE预期

然后我做:

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 

我得到的结果。这对任何人都有意义吗?它可能与被视为文本字段的字段有关吗?除非它没有引号,所以我不知道为什么会这样。

请让我知道,如果你以前见过这个。

这是一个完整的查询:

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; 

回答

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列,但他们显然一个成为某种类型的文本字段在某个查询中的某处。

我仍然有兴趣听到如何工作的解释。

谢谢

+0

Val将文本字段转换为您的示例中的数字,这意味着您没有数据类型不匹配。你想要解释什么? – Fionnuala 2012-07-30 09:22:45

+0

顺便说一句,避免使用*来选择字段几乎总是最好的。 – Fionnuala 2012-07-30 09:24:01