약간의 설명이 도움이 될 것입니다. 16 개의 테이블 모두에 동일한 필드가 있고 연속 목록에 포함하려는 경우 위에 제안 된대로 UNION을 사용할 수 있습니다. 반면에 일치하는 필드가 거의없고 각 테이블의 값을 나란히 비교하려는 경우 조인을 사용하고 위의 제안처럼 테이블 이름에 별칭을 제공해야합니다.
그러나 제공 한 코드 스 니펫을 보면 저장 프로 시저를 구축하고 있거나 다른 언어로 SQL을 구현하고있는 것으로 추측합니다. 그런 경우에는 어떻게 배열로 테이블 이름을로드 및 다음과 같은 사이비 코드와 같이 쿼리를 작성하는 루프를 사용하는 방법에 대한 : 등
tableList = ["table1", "table2"...]
fieldnames = ["field1", "field2"...]
query = "SELECT "
for i = 0 to count(tableList):
for j = 0 to count(fieldnames):
query = query + tablelist[i] + "." + fieldnames[j] + ", "
j++
i++
query = query + "FROM "
for i = 0 to count(tableList):
query = query + tableList[i] + ", "
i++
query = query + "WHERE " ...
그리고있다. 대부분의 작업은 원하는 작업, 수행 할 작업의 빈도 및 사용중인 테이블이나 필드와 같은 변수가 변경되는 빈도에 따라 달라집니다.
샘플 데이터와 예상 결과를 사용하여 테이블 구조를 게시해야합니다. 마찬가지로 대답하거나 이해하기가 어렵습니다. 귀하의 질의는 결과의 '데카르트 곱 (cartesian product)'을 생성하고 하나의'id' 필드가 그 테이블 중 하나에 있다고 가정합니다. 하나 이상의 (많은 의미를 갖지는 않을 것입니다) ... – sgeddes
시도에주의하십시오 쿼리는 모든 16 개의 테이블 간 교차 조인이므로 각 테이블 세트의 카디 전 곱을 반환합니다. 따라서 WHERE 절이 없으면 총 레코드는 각 테이블의 레코드 수 (수백만에 도달 할 수 있음)의 결과입니다. t1 X t2 X t3 ... – Parfait
감사합니다. Parfait, Mr sgeddes,이 16 개의 테이블은 "id"로 외래 키로 클라이언트와 관련되어 있습니다. 그래서이 16 개의 테이블을 조사하여 클라이언트와 관련된 모든 정보를 찾으려고합니다. 클라이언트가 테이블에 두 개 이상의 결과를 가지고있는 것 같아서 ........ .... 예를 들어 클라이언트는 costumer이고 우리는 commands라는 테이블을 가지고 있으므로 costumer는 명령 테이블에 둘 이상의 명령을 가지고 있습니다. – Joseph