2016-12-02 9 views
0

데이터베이스 (excel file, accdb, mdb ...)에서 쿼리하는 데 ADO를 사용하고 있습니다. 현재 혼란스러운 점은 무엇입니까? SQL 내부에서 조건을 설정하여 테이블/DB를 선택할 수 있습니까? 는 일반적으로 :조건을 사용하여 테이블/데이터베이스를 지정하여 데이터를 선택할 수 있습니까?

SELECT Field1 FROM table1 

나는 무엇을 기대 :

SELECT F1 from switch(A=2, table1, true, Table2) 

내가 조건에서 SQL 문자열을 만들어 VB에서이 작업을 수행 할 수 있지만 그렇지 않은 :

if A=2 then SELECT F1 FROM table1 else SELECT F1 from table2 

또는 같은

어떤 원시 SQL 문이 이것을 할 수 있는지 안다? (스위치 테이블/ExternalDB 선택)

+0

네, 그렇게 할 수는 있지만 기본적으로 vb와 같은 줄에 있습니다. 동적 SQL을 작성할 수 있습니다. –

+0

그것은 SQL보다 vb/C#에서 더 잘됩니다. 변수를 기반으로 SQL을 생성 한 다음 – GurV

+0

감사합니다. SQL 문자열이 너무 ez입니다. 나는 네이티브 SQL을 사용하는 방법이 있는지보고 싶지만 (전반적으로 성능을 떨어 뜨리지는 않습니다). – Sum

답변

0

동적 SQL에서 가장 쉽게 수행 할 수 있습니다. 즉, 원하는 쿼리를 작성하십시오.

그렇지 않으면, 당신은 할 수있다

SELECT F1 
FROM table1 
WHERE "A" = 2 
UNION ALL 
SELECT F1 
FROM table2 
WHERE "A" <> 2; 

UNION ALL는 두 가지 가능성을 결합한 제품입니다. "A"A이 변수라는 사실을 나타냅니다. 정확한 구문은 데이터베이스와 액세스 메커니즘에 따라 다릅니다.

+0

이 방법은 table1과 table2 내용 (1m 행 이상)이 많은 경우 전반적인 성능이 많이 떨어질 것이라고 생각합니다. 어쨌든 너는 나에게 그것이 가능하다는 것을 보여 주었다. 고든에게 감사한다. 그냥 2 개 이상의 테이블, 테이블의 동적 번호가 있다면 문제 자체보다 복잡 할 것입니다 lol – Sum

+0

@Sum. . . 상수 조건이 거짓 일 때 쿼리가 테이블의 데이터를 읽는지 여부는 데이터베이스 최적화 프로그램에 따라 다릅니다. 대부분의 최적화 프로그램은 빈 결과 집합을 매우 빨리 반환합니다. –

+0

문제는 이와 같이 3 개의 테이블이 동일한 형식으로 각 테이블 내용이 월을 지정합니다 (tbl1 1-> 4, tbl2 5-> 9, tbl3 10-> 12). 어떤 달 (1 ~ 12)에서 데이터를 쿼리하기 만하면 UNION ALL (tbl1 + tbl2 + tbl3) <---이 속도 저하 프로세스에서 쿼리해야합니다. 그래서 필자는 PC가 필요한 테이블 만로드 할 수있게 해주는 트릭을 찾으려고 노력합니다 (각 테이블 내용이 1m 레코드 이상이므로). – Sum

0

당신은 VB를 사용하는 경우 : 당신은 기본적으로 모든 언어에서이 작업을 수행 할 수 있습니다

sql = "select f1 from " & if(A=2,"table1", "table2") 

.