테이블이 A
이고 문장이 가득 찼습니다.테이블을 통해 SQL을 대체
단어와 약어의 두 열이있는 다른 테이블 B
이 있습니다.
테이블 A
의 열 문장을 살펴보고 테이블 B
의 단어 열의 단어가 일치하면 약어로 바꿉니다.
희망은 분명합니다.
사례가 중요하지 않아도 처리 할 수 있습니다. 모든 것이 상한 또는 하등 어떤 것으로 가정하십시오.
테이블이 A
이고 문장이 가득 찼습니다.테이블을 통해 SQL을 대체
단어와 약어의 두 열이있는 다른 테이블 B
이 있습니다.
테이블 A
의 열 문장을 살펴보고 테이블 B
의 단어 열의 단어가 일치하면 약어로 바꿉니다.
희망은 분명합니다.
사례가 중요하지 않아도 처리 할 수 있습니다. 모든 것이 상한 또는 하등 어떤 것으로 가정하십시오.
SQL만으로는이 작업을 수행 할 수 없습니다. 데이터베이스에서 데이터를 가져 와서 조작 한 다음 다시 밀어 넣어야합니다.
여러 가지 방법이 있지만 일부는 더 간단하고 다른 일부는 더 효율적입니다.
예를 들어 단순하지만 느린 방법은 모든 문장의 모든 단어에 대한 쿼리를하고있어sentence_list = db.execute("SELECT id, sentence FROM A")
for sentence in sentence_list do
words = tokenize(sentence.text)
for word in words do
abbrev = db.execute("SELECT abbrev FROM B WHERE word=word")
if abbrev
word = abbrev
sentence.text = concat(words)
db.execute("UPDATE A SET sentence=" + sentence.text + " WHERE id = " + sentence.id + ")")
아니라 성능이 중요한 상황에 권장하지만 일을 ... (의사 코드에서) 일 것이다.
당신은 미칠 수 있고 Excel에서 mysql ODBC 연결을 추가 할 수 있습니다. 하나의 쿼리 테이블에서 문장을 쿼리하고 다른 테이블에서 조회 단어를 쿼리 한 다음 테이블을 새로 고치고 검색 및 바꾸기를 수행 한 다음 테이블로 다시 가져 오는 작은 매크로를 작성합니다. 나는 Msql에서 DTS/SSIS에서이 모든 작업을 자동으로 수행 할 수 있음을 알고 있습니다.
나는이 오래된 질문 알고 있지만 응답이 없기 때문에, 나는이와 시도주지 :
의 MySQL 5.5.32 스키마 설정 :
CREATE TABLE Table1
(`Id` int, `Sentence` varchar(80))
;
INSERT INTO Table1
(`Id`, `Sentence`)
VALUES
(1, 'Mister John is going to Los Angeles')
;
CREATE TABLE Table2
(`Id` int, `Word` varchar(60), `Abbrev` varchar(10))
;
INSERT INTO Table2
(`Id`, `Word`, `Abbrev`)
VALUES
(1, 'Mister', 'Mr.'),
(2, 'Los Angeles', 'L.A.')
;
DROP PROCEDURE IF EXISTS updateSentences //
CREATE PROCEDURE updateSentences()
BEGIN
DECLARE count INT;
SELECT COUNT(*) INTO count
FROM Table1
INNER JOIN Table2 ON CONCAT(' ',Sentence,' ') LIKE CONCAT('%',Word,'%');
WHILE count > 0 DO
UPDATE Table1
INNER JOIN (SELECT t1.id, Word,Abbrev
FROM Table1 t1
INNER JOIN Table2 ON CONCAT(' ',Sentence,' ') LIKE CONCAT('%',Word,'%')
LIMIT 1) Table2 ON Table1.Id = Table2.Id
SET Sentence = REPLACE(Sentence,Word,Abbrev);
SELECT COUNT(*) INTO count
FROM Table1
INNER JOIN Table2 ON CONCAT(' ',Sentence,' ') LIKE CONCAT('%',Word,'%');
END WHILE;
END//
을
쿼리 :
SELECT *
FROM Table1
[결과] :
| ID | SENTENCE |
|----|-------------------------------------|
| 1 | Mister John is going to Los Angeles |
검색어 :
CALL updateSentences()
SELECT *
FROM Table1
Results :
이| ID | SENTENCE |
|----|---------------------------|
| 1 | Mr. John is going to L.A. |
나는 그것이 순수한 SQL이 작업을 수행 할 수 생각하지 않습니다 , 어떤 언어를 우리에게 계획하고 있습니까? 이자형? 성능에 대한 우려가 있습니까? 이게 자주 나올까요? – Clash
순수한 SQL (MySQL)을 찾고 있었으나 성능상의 문제는 아니 었습니다. – Llynix