2012-02-20 2 views
2

2003 나는 MS Access 2003에서 쿼리를 만들고 싶었다, 즉 튜플에 근무하는 IN 절을 가질 것이다 (또는 VBA에서 SQL)튜플은

의 열이 있어야하며 IN 절을 사용하여 2010-10 및 2012-03을 추출하고 싶습니다. Postgres의 비교를 위해

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

으로 표시되지만 Access에서 나에게 적합하지 않습니다. 예, 저는 12 월과 12 월 둘 다 텍스트으로 저장하지만 실제로는 문제가되지 않습니다.

나는 내가 많은 또는, 또는이 LEFT 임시 테이블 가입하게 사용하여 작성할 수 있습니다 알고 있습니다. 그러나 이러한 쿼리는 프로 그래 밍적으로 만들어 지므로 가능한 한 간단하게 만들고 싶습니다. 에 대해

+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

+0

... 그러나 디자인 문제가 있다고 생각합니다. 'text'유형의 두 속성을 사용하여 한 달의 기간을 모델링하는 것 같습니다. 일시적인 데이터 유형을 사용하는 것을 고려하십시오. [달력 테이블] (http://sqlserver2000.databases.aspfaq.com/why-should-i-consider-using-an-auxiliary-calendar-table.html)과 결합되어있을 수도 있지만 하나의 쿼리를 기반으로 좋은 조언을 제공;) – onedaywhen

+0

많이 설계되지 않았습니다. 위와 같이 작동하는 쿼리를 작성해야하는 빠른 작업이었습니다. 물론 Postgres로 모든 것을 가져올 수는 있지만 Access에 파일을 가져 오는 것보다 테이블을 만드는 데 시간이 오래 걸립니다. 따라서 이런 종류의 WHERE Clouse를 만들 수 있는지 알고 싶었습니다. –

답변

3

방법 : 2000 표준 :

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

좋은 해결 방법이며 ** year ** & ** month ** 유형에 관계없이 작동합니다 ** ** 숫자 ** 또는 ** 텍스트 ** 일 수 있습니다. –

+0

이 구문은 인덱스 사용을 허용하지 않습니다. –

+2

OP는 IN을 사용하기를 원하며, 해당 조건에서는 색인 된 검색이 불가능합니다. – Fionnuala

관련 문제