2012-02-20 73 views
2

我想做一个查询在MS Access 2003中(或只是在VBA SQL)这将有IN子句元组,即工作,元组在MS Access IN子句2003

我必须列出,我想提取例如2010-10和2012-03使用IN条款。在Postgres比较它看起来像

SELECT * FROM my_table WHERE (year, month) IN (("2010","10"),("2012","03")); 

但它不适用于我在Access中。是的,我同时存储文本,但它确实没有关系。

我知道我可以把它使用许多OR,或作出LEFT JOIN用临时表写。但是这些查询是以编程方式创建的,所以我想尽可能简单。

+1

如果用单引号代替双引号那么你的SQL与SQL标准。不幸的是,Access甚至不符合入门级SQL:2000,并且不支持该语法([它在SQL Server上不受支持](http://connect.microsoft.com/SQLServer/feedback/details/299231/add -support-for-ansi-standard-row-value-constructors)或者)。 – onedaywhen 2012-02-21 10:07:22

+0

...但是,我认为你有一个设计问题。您似乎正在使用两种'text'类型的属性来建模一个月的时间。考虑使用时态数据类型,或许与[日历表](http://sqlserver2000.databases.aspfaq.com/why-should-i-consider-using-an-auxiliary-calendar-table.html)结合使用,但很难根据单个查询给出好的建议;) – onedaywhen 2012-02-21 10:17:56

+0

没有太多的设计。这是一个快速的任务,我需要创建一个像上面那样工作的查询。当然,我可以将所有东西都导入到Postgres中,但创建表格等比将文件导入Access需要更长的时间。因此,我想知道是否有可能制作这种WHERE clouse。 – 2012-03-01 23:13:43

回答

3

如何:2000标准:

SELECT * FROM my_table WHERE year & month IN ("201010","201203") 
+0

良好的解决方法,它可以工作,无论**年**和**月**的类型**我的意思是他们可能是**数字**或**文本**。 – 2012-02-20 09:39:40

+0

请注意,此语法不允许使用索引。 – 2012-02-20 15:33:31

+2

OP希望使用IN,在该条件下索引搜索将不可能。 – Fionnuala 2012-02-20 15:39:41