2011-09-09 5 views
0

약 200 개의 테이블이있는 데이터베이스가 있고 특정 열 (creation_date)을 포함하는 모든 테이블에 대해 쿼리를 수행해야하지만 모든 테이블에 해당 열이있는 것은 아닙니다. SELECT * FROM * WHERE creation_date>=42은 분명히 작동하지 않지만 최선의 방법은 무엇입니까?(내) SQL : FROM 절의 와일드 카드?

+1

쿼리 할 테이블을 명시 적으로 포함시켜야한다고 생각합니다 ... – Marco

+1

달성하려는 대상은 정확히 무엇입니까? 해당 열을 포함하는 모든 테이블에서 모든 행 (조건과 일치)이 필요한 이유는 무엇입니까? 그게 아주 이상한 일처럼 들리네 –

+0

중복 가능성 : http://stackoverflow.com/questions/639531/mysql-search-in-all-fields-from-every-table-from-a-database – reggie

답변

-1

당신은 당신과 같이 조회 할 테이블을 포함하도록 시도 할 수 있습니다 :

SELECT * FROM table1 a, table2 b WHERE a.creation_date>=42 

당신은에서 와일드 카드를 사용할 수 있습니다. 위와 같이 where 절을 적용해야하는 테이블을 지정할 수 있습니다. 칼럼이없는 것을 제외 할 수 있습니다.

예제 쿼리에서 table1 (별칭 a)에는 열이 있고 table2 (별칭 b)에는 없습니다.

+4

이 명령문은 조인 조건이 제공되지 않으므로이 두 테이블간에 직교 좌표를 생성하므로 매우 위험합니다. 알맞은 크기의 테이블을 사용해도 큰 결과가 나올 것입니다 –

+0

당신은 절대적으로 맞습니다 ...하지만 대답은 질문입니다. 그래도 좋은 의견! –

+0

-1, 교차 결합이 아닌 공용체가 필요합니다. 'table1 union select f1 from table2 union select .... '에서 선택하십시오. – Johan

0

메타 데이터에서 동적 SQL 쿼리를 작성할 수 있습니다. 나는 접근 것 같은 :

  1. 테이블 각 테이블에 대해
  2. 의 목록을 가져, 테이블 열을 creation_date
  3. 이있는 경우가는이 테이블에 쿼리를 추가 할 경우
  4. 참조 동적 쿼리
  5. 연합 (EU)을 함께

결과는 또한 여러 테이블에 뷰를 생성 할 수 있습니다. 그런 다음보기를 쿼리 할 수 ​​있습니다. MySQL의에서 직접 복사

2
SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT, TABLE_NAME, 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE table_name = 'tbl_name' 
    [AND table_schema = 'db_name'] 
    [AND column_name ='creation_date'] 

- 당신은이 시스템 테이블을 통해 루프 필요 목록

다음 당신은 당신의 SQL 문을 구축하고 그들이 일을 확신 할 수 있습니다 ... 사람들을 포함 ...

+0

그래서, 문을 조립하는 데 외부 논리가 필요하며 순수한 SQL로 처리 할 수 ​​없습니까? 그게 제가 피 하려던 것입니다. – Creshal

+0

순수 SQL 문을 수행 할 수 있습니다. invovled 시스템 테이블은 다른 테이블과 같습니다. 전 전 예를해야합니까? 너를 위해서? – Mike