2013-08-26 4 views
0

지금까지 "store_id"라는 열 이름을 가진 모든 테이블의 목록을 제공한다는 것을 알았지 만 "store_id"가 " = 4, 내가 어떻게 이럴 수 있니?값이 X 인 데이터베이스에서 테이블 선택

지금은이 항목을 사용하여 "store_id"열이있는 표를 찾습니다.

SELECT DISTINCT TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE COLUMN_NAME IN ('store_id') 
AND TABLE_SCHEMA='db1'; 
+1

가 저장 프로 시저를 사용하는 것입니다 수 있습니다 이. 이름이'store_id' 인 컬럼이있는 모든 테이블을 처음으로 반복하십시오. select query에 where 조건을 넣는다. –

답변

0

: 여기

 
| TABLE_NAME | 
-------------| 
|  table1 | 

SQLFiddle 데모


이제 저장 프로 시저에

DELIMITER $$ 
CREATE PROCEDURE list_tables(IN _column_name VARCHAR(64), IN _column_value VARCHAR(256)) 
BEGIN 
    SET @sql = NULL; 

    SELECT GROUP_CONCAT(DISTINCT 
      CONCAT('SELECT ''', TABLE_NAME, ''' table_name 
        FROM ', TABLE_NAME, 
        ' WHERE ', _column_name, ' = ''', _column_value, '''') 
      SEPARATOR ' UNION ALL ') 
    INTO @sql 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE COLUMN_NAME = _column_name 
    AND TABLE_SCHEMA = SCHEMA(); 

    SET @sql = CONCAT(@sql, ' ORDER BY table_name'); 

    PREPARE stmt FROM @sql; 
    EXECUTE stmt; 
    DEALLOCATE PREPARE stmt; 
END$$ 
DELIMITER ; 

그것을 마무리로 끝을 전화에 일을 단순화하고 여기에이

CALL list_tables('store_id', '4'); 

처럼 사용 SQLFiddle 데모

0

MySQL에 IF 절을 사용하십시오.

SELECT DISTINCT TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE 
IF(store_id = 4) 
    COLUMN_NAME = store_id 
END IF; 

또는

당신은 case 문을 사용할 수 있습니다. 당신이

SET @sql = NULL; 

SELECT GROUP_CONCAT(DISTINCT 
     CONCAT('SELECT ''', TABLE_NAME, 
       ''' table_name FROM ', TABLE_NAME, 
       ' WHERE store_id = 4') 
     SEPARATOR ' UNION ALL ') 
    INTO @sql 
    FROM INFORMATION_SCHEMA.COLUMNS 
WHERE COLUMN_NAME = 'store_id' 
    AND TABLE_SCHEMA = SCHEMA(); 

SET @sql = CONCAT(@sql, ' ORDER BY table_name'); 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

샘플 출력과 같은 동적 SQL 함께 할 수

SELECT DISTINCT TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE CASE WHEN store_id = 4 
      THEN COLUMN_NAME = store_id 
+0

'INFORMATION_SCHEMA.COLUMNS'는'store_id'라는 이름의 컬럼이 없으므로 두 쿼리 모두 실패합니다. –

관련 문제