programing

MySQL 테이블을 CSV 파일로 내보내기

topblog 2023. 9. 5. 19:34
반응형

MySQL 테이블을 CSV 파일로 내보내기

CSV 파일로 꺼내야 하는 MySQL 테이블이 있습니다.제가 사용한 쿼리는

SELECT "ID","NAME","SALARY","SAL1","SAL2","SAL3","SAL4","SAL5","SAL6","SAL7","SAL8","SAL9","SAL10","SAL11","SAL12","SAL13","SAL14","SAL15","SAL16","SAL17","SAL18","SAL19","SAL20","SAL21","SAL22","SAL23","SAL24","SAL25","SAL26"
UNION ALL
SELECT *
FROM addstock25
INTO OUTFILE "E:\\JOSE DATA\\addstock7.csv"
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';

이 쿼리는 작동하지만 200개의 열 이름이 있으면 어떻게 합니까?수동으로 입력하지 않고 할 수 있는 방법이 있습니까?

이 명령은 사용자가 원하는 것을 거의 제공하며 원격 서버에서도 작동합니다.유일한 경고는 TSV 파일을 생성한다는 것입니다(필드는 탭으로 구분됨).

mysql mydb -e "select * from mytable" -B > mytable.tsv 

그러나 다음 답변에서 제안한 대로 sed를 사용하여 CSV로 변환할 수 있습니다.

mysql mydb -e "select * from mytable" -B | sed "s/'/\'/;s/\t/\",\"/g;s/^/\"/;s/$/\"/;s/\n//g" > mytable.csv
DESCRIBE addstock25;

첫 번째 열과 해당 열의 처음 세 개 항목을 제거합니다(사용 용도에 따라 다름).addstock25에서 필드 목록을 얻을 수 있습니다.

코어에서 파생된 가상 테이블을 사용하는 필드 이름만 가져옵니다.호출된 정보 스키마입니다.

SELECT `COLUMN_NAME` 
FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_NAME`='foo';

이 쿼리의 이름이 sq_fieldnamelist라고 가정합니다.

따라서 위의 표에는 하나의 열이 있고 "foo" 표의 필드 이름이 있습니다.

이렇게 직접적으로 쓴다면,

SELECT (sq_fieldnamelist)
UNION ALL
SELECT *
FROM addstock25
INTO OUTFILE "E:\\JOSE DATA\\addstock7.csv"
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n

MySQL에서 오류가 발생합니다."하위 쿼리가 여러 행을 반환함"

sq_fieldnamelist를 편집하여 모든 항목을 쉼표로 구분하여 뒤로 연결해야 합니다.

Select GROUP_CONCAT(COLUMN_NAME)
FROM
(SELECT `COLUMN_NAME` 
FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_NAME`='ffd_companies'
LIMIT 3,100
) AS fafa
GROUP BY 'COLUMN_NAME' // This group by is just to make group concatenation work

sq_fieldnamelist2라고 가정합니다.

이렇게 sq_fieldnamelist를 편집하면 쉼표로 구분된 필드 이름 중 하나의 값만 반환됩니다.이제 이 하위 쿼리를 선택 문에 입력하여 필요한 필드를 가져올 수 있습니다.

SELECT (sq_fieldnamelist2)
UNION ALL
SELECT *
FROM addstock25
INTO OUTFILE "E:\\JOSE DATA\\addstock7.csv"
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n

sq_fieldnamelist2의 LIMIT 3,100을 자신의 목적에 맞게 편집해야 합니다.

테이블이 fil1, fil2와 같다고 가정해 보겠습니다.filN, sal1, sal2, sal3..., salI.급여 필드만 보려면 다음을 사용해야 합니다.LIMIT N, x > I+N모두 보려면 다음을 사용합니다.LIMIT 0, x > N+I.

당신이 왜 못하는지 모르겠어요

SELECT *
FROM addstock25
INTO OUTFILE "E:\\JOSE DATA\\addstock7.csv"
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'

당신은 이런 것을 찾고 있는 것 같습니다.

SET @sql = NULL;
SELECT GROUP_CONCAT("'",COLUMN_NAME,"'")
 FROM
(SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA` = 'yourdatabasename'
and `TABLE_NAME`='ffd_companies'
) AS colnames
GROUP BY 'COLUMN_NAME'
into @sql;

SET @sql = concat ("SELECT", @sql, " from dual
UNION ALL
SELECT *
FROM addstock25
INTO OUTFILE 'E:\\JOSE DATA\\addstock7.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '", '"',"'
)"
);

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

참고로 다음을 추가했습니다.WHERETABLE_SCHEMA'데이터베이스 이름'입니다.

'Table Data Export Wizard'를 사용하여 선택한 SQL을 복사할 수 있습니다.

언급URL : https://stackoverflow.com/questions/22783202/exporting-a-mysql-table-into-a-csv-file

반응형