답변:
열이 columnA
있거나 ColumnB
데이터베이스에있는 모든 테이블을 가져 오려면 다음을 수행하십시오 YourDatabase
.
SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME IN ('columnA','ColumnB')
AND TABLE_SCHEMA='YourDatabase';
DATABASE()
문자열 대신 사용 하여 현재 선택된 데이터베이스를 검색 할 수도 있습니다 .
SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%wild%';
TABLE_SCHEMA
반환 열의 필드에 추가 하여 해당 열 이름이 포함 된 모든 데이터베이스 + 테이블을 봅니다.
show tables;
. 아무도 이것이 왜 그런지 설명 할 수 있습니까?
한 줄의 SQL로 더 간단하게 수행하십시오.
SELECT * FROM information_schema.columns WHERE column_name = 'column_name';
information_schema
이전 버전 또는 일부 ndb 가없는 버전에서는 테이블 구조를 덤프하고 열을 수동으로 검색 할 수 있습니다.
mysqldump -h$host -u$user -p$pass --compact --no-data --all-databases > some_file.sql
이제 some_file.sql
원하는 텍스트 편집기 를 사용하여 열 이름을 검색 하거나 멋진 awk 스크립트를 사용하십시오.
간단한 sed 스크립트를 사용하여 열을 찾으려면 COLUMN_NAME 을 다음과 같이 바꾸 십시오.
sed -n '/^USE/{h};/^CREATE/{H;x;s/\nCREATE.*\n/\n/;x};/COLUMN_NAME/{x;p};' <some_file.sql
USE `DATABASE_NAME`;
CREATE TABLE `TABLE_NAME` (
`COLUMN_NAME` varchar(10) NOT NULL,
sed에서 덤프를 직접 파이프 할 수 있지만 사소한 것입니다.
이것의 역을 검색하는 사람들, 즉 특정 열 이름을 포함하지 않는 테이블을 찾는 사람들에게는 여기 쿼리가 있습니다 ...
SELECT DISTINCT TABLE_NAME FROM information_schema.columns WHERE
TABLE_SCHEMA = 'your_db_name' AND TABLE_NAME NOT IN (SELECT DISTINCT
TABLE_NAME FROM information_schema.columns WHERE column_name =
'column_name' AND TABLE_SCHEMA = 'your_db_name');
이것은 InnoDB의 특수 ai_col
컬럼 사용을 천천히 구현하기 시작했을 때 매우 유용 했으며 아직 업그레이드되지 않은 200 개의 테이블을 파악해야했습니다.
" 모든 테이블 만 가져 오려면 "이 쿼리를 사용하십시오.
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME like '%'
and TABLE_SCHEMA = 'tresbu_lk'
" 열이있는 모든 테이블을 가져 오려면 "이 쿼리를 사용하십시오.
SELECT DISTINCT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE column_name LIKE '%'
AND TABLE_SCHEMA='tresbu_lk'
information_schema의 문제점은 매우 느릴 수 있다는 것입니다. SHOW 명령을 사용하는 것이 더 빠릅니다.
데이터베이스를 선택한 후 먼저 SHOW TABLES 쿼리를 보냅니다. 그런 다음 각 테이블에 대해 SHOW COLUMNS를 수행하십시오.
PHP에서 다음과 같이 보일 것입니다
$ res = mysqli_query ( "쇼 테이블"); while ($ row = mysqli_fetch_array ($ res)) {$ rs2 = mysqli_query ( "SHOW COLUMNS FROM". $ row [0]); while ($ rw2 = mysqli_fetch_array ($ rs2)) {if ($ rw2 [0] == $ target) .... } }
select distinct table_name
from information_schema.columns
where column_name in ('ColumnA')
and table_schema='YourDatabase';
and table_name in
(
select distinct table_name
from information_schema.columns
where column_name in ('ColumnB')
and table_schema='YourDatabase';
);
^^ 허용 된 답변과 같이 ColumnA OR ColumnB 대신 ColumnA AND ColumnB가있는 테이블을 가져옵니다.