2012-02-20 76 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