[SQL] MySQL은 단일 키워드 WHERE 조건 하나를 사용하여 테이블의 모든 열을 검색
SQLMySQL은 단일 키워드 WHERE 조건 하나를 사용하여 테이블의 모든 열을 검색
나는 64 개 다른 필드로 구성 테이블이있다. 나는 거기에 하나의 키워드를 검색하기 위하여려고하고, 결과는 모든 필드에서 키워드와 일치해야합니다. 몇 가지 제안을 제공합니다.
해결법
-
==============================
1.
SELECT * FROM `some_table` WHERE CONCAT_WS('|',`column1`,`column2`,`column3`,`column4`,`column64`) # single condition, many columns LIKE '%VT%'
짜잔.
'|' 분리, 그런데, 예를 들어, 우연 일치하는 경우, "VT"에 대한 검색에서 당신에게 거짓 양성을 줄 것 'T'와 'V'와 2 열 시작에서, 컬럼 끝을 찾는 당신을 방지하는 것입니다.
나는 확실하지 위의 방법이 더 빨리 또는 방법보다 경우 (나는 그들이 동일한 속도를 추측 것)이야,하지만 당신은 손으로 쿼리를 작성하는 경우 그것은 확실히 덜 입력을 포함한다.
-
==============================
2.어디 또는 여러 조건으로 사용할 수 있습니다
어디 또는 여러 조건으로 사용할 수 있습니다
처럼
where name = 'expected' OR rate ='expected' OR country ='expected'
-
==============================
3.나는 긴 쿼리 존재의 간단하지만 주위에 방법을 볼 수 없습니다 :
나는 긴 쿼리 존재의 간단하지만 주위에 방법을 볼 수 없습니다 :
SET @term = "Somesearch"; SELECT id, title FROM sometable WHERE col1 LIKE '%@term%' OR col2 LIKE '%@term%' OR col3 LIKE '%@term%' ...;
대신 MySQL의 변수를 사용하여, 당신은 단지 언어 별 변수를 사용할 수 있지만 예를 위해, 나는 MySQL의 자체 고수라고 생각했다.
당신이 다른 61 열 / 필드를 배치 줄 곳은 ... ""입니다.
-
==============================
4.또 다른 가능성은 다음과 같이 ... 하나의 필드로 인쇄 할 모든 열을 얻을 FOR XML을 사용하는 것입니다 :
또 다른 가능성은 다음과 같이 ... 하나의 필드로 인쇄 할 모든 열을 얻을 FOR XML을 사용하는 것입니다 :
SELECT c.* FROM ( SELECT a.* ,( SELECT * FROM table_to_search b WHERE a.KeyField = b.KeyField FOR XML RAW) AS `Full_Text_Record` FROM table_to_search a) c WHERE c.`Full_Text_Record` LIKE '%Search_string%'
그것은 특히 큰 테이블의 경우 실행하는 데 시간이 걸릴 수도 있지만 그 문자열이 특정 테이블에 존재 여부를 확인 할 수 무력한다.
-
==============================
5.당신은 MySQL의이 SQL 서버 구문을 번역 할 수있는 경우
당신은 MySQL의이 SQL 서버 구문을 번역 할 수있는 경우
WHERE name = @keyword OR country = @keyword OR department = @keyword OR @keyword IS NULL -- match all when search text is empty
-
==============================
6.간단한 해결책은 여러 관찰 보고서를 사용하는 것입니다.
간단한 해결책은 여러 관찰 보고서를 사용하는 것입니다.
select * from TAB where col1 like "%VAR%" OR col2 like "%VAR%" OR......col64 like "%VAR%";
당신은 같은 또는 =에 따라 요구 사항을 사용할 수 있지만, 그것은 당신의 쿼리 새 열을 추가 할 때마다 변경이 필요합니다.
다른 방법으로, 해당 테이블에 대한 SQLDump을 다음 해당 파일을 검색 할 수 있습니다.
일부 인터넷 검색으로,
-
==============================
7.당신은 당신의 테이블의 모든 컬럼에 대한 쿼리를 생성 한 쿼리를 작성할 수 있습니다. 스키마 ( "소유자") 아래의 예에서 'DEV_USER'입니다 당신의 64 개 필드가있는 테이블은 'CUSTOMER_INFO'라고 검색의 기준 그것에 'VT'의 값을 가진 모든 열이다 :
당신은 당신의 테이블의 모든 컬럼에 대한 쿼리를 생성 한 쿼리를 작성할 수 있습니다. 스키마 ( "소유자") 아래의 예에서 'DEV_USER'입니다 당신의 64 개 필드가있는 테이블은 'CUSTOMER_INFO'라고 검색의 기준 그것에 'VT'의 값을 가진 모든 열이다 :
select 'SELECT ' || COLUMN_NAME || ' FROM CUSTOMER_INFO WHERE ' || COLUMN_NAME || q'# LIKE '%VT%';#' FROM ALL_TAB_COLS WHERE OWNER = 'DEV_USER' AND TABLE_NAME = 'CUSTOMER_INFO';
이 하나 개의 쿼리는 각 필드에 대한 쿼리를 생성합니다. 다음은 위의 실행 결과;
SELECT ADDRESS_1 FROM CUSTOMER_INFO WHERE ADDRESS_1 LIKE '%VT%'; SELECT ADDRESS_2 FROM CUSTOMER_INFO WHERE ADDRESS_2 LIKE '%VT%'; SELECT CITY FROM CUSTOMER_ADDRESSES_QASB WHERE CITY LIKE '%VT%'; SELECT STATE_PROVINCE FROM CUSTOMER_INFO WHERE STATE_PROVINCE LIKE '%VT%'; SELECT ZIP_POSTAL_CODE FROM CUSTOMER_INFO WHERE ZIP_POSTAL_CODE LIKE '%VT%'; WHERE LATITUDE LIKE '%VT%'; ... and so on for each column in the table
그럼 그냥 다른 탭으로 첫 번째 쿼리에서 생성 된 그 쿼리를 붙여 넣기를 실행합니다.
희망이 도움이. :-)
-
==============================
8.당신은 검색 모든 열이 쿼리를 생성하고 실행하는 동적 SQL을 사용할 수 있습니다.
당신은 검색 모든 열이 쿼리를 생성하고 실행하는 동적 SQL을 사용할 수 있습니다.
DELIMITER $$ CREATE PROCEDURE searchAllCols(inDB VARCHAR(64), inTable VARCHAR(64), search VARCHAR(32)) BEGIN SET @matches = ( SELECT GROUP_CONCAT(CONCAT('`', COLUMN_NAME, '` LIKE "%', search, '%"') SEPARATOR ' OR ') FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = inTable and table_schema = inDB); SET @query = CONCAT('SELECT * FROM `', inDB, '`.`', inTable, '` WHERE ', @matches); PREPARE stmt FROM @query; EXECUTE stmt; END $$ DELIMITER ; CALL searchAllCols('table_to_search', 'searchString');
from https://stackoverflow.com/questions/12550368/search-all-columns-of-a-table-using-a-single-where-condition-with-single-keyword by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 공통 테이블 표현식, 왜 세미콜론? (0) | 2020.04.11 |
---|---|
[SQL] 예외 의해 포스트 그레스 윈도우 함수 그룹 (0) | 2020.04.11 |
[SQL] 오라클 - ORA-01489가 : 문자열 연결의 결과가 너무 오래입니다 [중복] (0) | 2020.04.11 |
[SQL] 어떻게 재귀에서 데이터베이스 트리거를 방지합니까? (0) | 2020.04.11 |
[SQL] 행이 존재하는지 확인하는 PL / pgSQL의 (0) | 2020.04.11 |