데이터 베이스 MySQL 튜토리얼 在SQL查询中使用LIKE来代替IN查询的方法

在SQL查询中使用LIKE来代替IN查询的方法

Jun 07, 2016 pm 06:02 PM
in like SQL 쿼리

在SQL查询中根据已知ID的集合来查询结果我们通常会用到IN,直接在IN后面给出ID的集合或是在IN后面跟一个子查询。

如下:
代码如下:
SELECT * FROM Orders
WHERE OrderGUID IN('BC71D821-9E25-47DA-BF5E-009822A3FC1D','F2212304-51D4-42C9-AD35-5586A822258E')

可以看出直接在IN后面跟ID的集合需要将每一个ID都用单引号引起来。在实际应用中会遇到这么一种情况,在界面中收集的是一串GUID的拼接字符串,中间以逗号隔开,如果作为参数传到一个存储过程中执行,最终生成的语句会是下面这样:
代码如下:
SELECT * FROM Orders
WHERE OrderGUID IN('BC71D821-9E25-47DA-BF5E-009822A3FC1D,F2212304-51D4-42C9-AD35-5586A822258E')

这样就不能查询到正确的结果。

一般情况下我们解决此问题的思路是将传入的字符串用一个split函数来处理,最终处理的结果是一张表,然后将这个表做自查询即可,如下:
代码如下:
DECLARE @IDs VARCHAR(4000)
SET @IDs='BC71D821-9E25-47DA-BF5E-009822A3FC1D,F2212304-51D4-42C9-AD35-5586A822258E'
DECLARE @temp TABLE(str VARCHAR(50))
INSERT INTO @temp
SELECT * FROM dbo.Split(@IDs,',')
SELECT * FROM Orders WHERE OrderGUID IN (SELECT str FROM @temp)

当然split函数系统比不提供,需要我们自己写:
代码如下:
CREATE FUNCTION Split
(
@SourceSql varchar(8000),
@StrSeprate varchar(10)
)
RETURNS @temp TABLE(F1 VARCHAR(100))
AS
BEGIN
DECLARE @i INT
SET @SourceSql=rtrim(ltrim(@SourceSql))
SET @i=charindex(@StrSeprate,@SourceSql)
WHILE @i>=1
BEGIN
INSERT @temp VALUES(left(@SourceSql,@i-1))
SET @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
SET @i=charindex(@StrSeprate,@SourceSql)
END
IF @SourceSql''
INSERT @temp VALUES(@SourceSql)
RETURN
END

像这样做非常麻烦,而且还需要借助函数来实现,下面介绍一种简单的方法,因为GUID是唯一的,所以在上面的例子中可以使用LIKE来代替IN也可以达到同样的查询效果:
代码如下:
SELECT * FROM Orders
WHERE 'BC71D821-9E25-47DA-BF5E-009822A3FC1D,F2212304-51D4-42C9-AD35-5586A822258E'
LIKE '%'+convert(VARCHAR(40),OrderGUID)+'%'
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

i18n을 사용하여 Vue에서 다국어 전환을 구현하는 팁 i18n을 사용하여 Vue에서 다국어 전환을 구현하는 팁 Jun 25, 2023 am 09:33 AM

국제화가 지속적으로 발전함에 따라 점점 더 많은 웹사이트와 애플리케이션이 다중 언어 전환 기능을 지원해야 합니다. 널리 사용되는 프런트엔드 프레임워크인 Vue는 다중 언어 전환을 달성하는 데 도움이 되는 i18n이라는 플러그인을 제공합니다. 이 기사에서는 i18n을 사용하여 Vue에서 다중 언어 전환을 구현하는 일반적인 기술을 소개합니다. 1단계: i18n 플러그인 설치 먼저 npm 또는 Yarn을 사용하여 i18n 플러그인을 설치해야 합니다. 명령줄에 다음 명령을 입력합니다: npminst

out 및 in 인터페이스는 무엇을 의미하나요? out 및 in 인터페이스는 무엇을 의미하나요? Sep 28, 2021 pm 04:39 PM

out 인터페이스는 출력 인터페이스를 나타내고 in 인터페이스는 입력 인터페이스를 나타냅니다. 아웃 인터페이스는 일반적으로 스피커, 헤드폰 등과 같은 부하를 연결하는 데 사용되는 오디오 소스 라인 출력 인터페이스를 나타내고, 인 인터페이스는 일반적으로 CD 플레이어, 모바일을 연결하는 데 사용되는 오디오 소스 라인 입력 인터페이스를 나타냅니다. 휴대폰, MP3 플레이어, 컴퓨터 등

MySQL의 REGEXP와 LIKE의 차이점은 무엇입니까? MySQL의 REGEXP와 LIKE의 차이점은 무엇입니까? May 30, 2023 pm 01:58 PM

1. 일치하는 내용의 차이 LIKE는 전체 데이터가 일치해야 하며 REGEXP는 부분 일치만 필요하며 하나의 조각만 충족하면 됩니다. 2. 일치 위치의 차이점: LIKE는 전체 열과 일치합니다. 일치하는 텍스트가 열 값에 나타나면 LIKE는 이를 찾지 않으며 해당 행은 반환되지 않습니다(REGEXP가 열 값 내에 사용되지 않는 한). 일치하는 텍스트가 열 값에 나타나면 REGEXP는 이를 찾아 해당 행을 반환하고 REGEXP는 전체 열 값을 일치시킬 수 있습니다(LIKE와 동일한 효과). 3. SQL 문은 LIKE 일치와 다른 데이터를 반환합니다: SQL 문

Meituan 인터뷰 질문: 느린 SQL을 본 적이 있습니까? 어떻게 해결되었나요? Meituan 인터뷰 질문: 느린 SQL을 본 적이 있습니까? 어떻게 해결되었나요? Aug 24, 2023 pm 03:41 PM

MySQL의 느린 쿼리 로그는 MySQL에서 제공하는 로그 기록으로, 쿼리 시간이 설정된 임계값(long_query_time)을 초과(이상)한 명령문을 MySQL에서 기록하여 느린 쿼리 로그에 기록하는 데 사용됩니다.

Python에서 mysql 데이터베이스 LIKE 연산자를 사용하는 방법 Python에서 mysql 데이터베이스 LIKE 연산자를 사용하는 방법 May 31, 2023 pm 09:46 PM

LIKE 연산자는 WHERE 절의 열에서 지정된 패턴을 검색하는 데 사용됩니다. 구문: SELECTcolumn_name(s)FROMtable_nameWHEREcolumn_nameLIKEpatternpattern 지정된 템플릿이 배치되는 위치이며 여기서는 와일드카드 문자 %라고도 하는 "%"가 사용됩니다. 조건 앞에 배치되면 ..로 끝나는 데이터를 검색합니다. .; 예: % Li %가 조건 뒤에 오면...으로 시작하는 데이터가 검색됩니다. 예: Li %%가 조건 앞뒤에 있으면 포함된 데이터가 검색됩니다. 리% 지식 포인트 : ERROR1064 (42000):Youhaveane

PHP 및 PDO: 복잡한 SQL 쿼리를 실행하는 방법 PHP 및 PDO: 복잡한 SQL 쿼리를 실행하는 방법 Jul 28, 2023 pm 03:43 PM

PHP 및 PDO: 복잡한 SQL 쿼리 문을 실행하는 방법 데이터베이스 작업을 처리할 때 PHP는 데이터베이스와의 상호 작용을 단순화하기 위해 강력한 확장 라이브러리 PDO(PHPDataObjects)를 제공합니다. PDO는 MySQL, SQLite 등 다양한 데이터베이스를 지원하며 개발자가 다양한 데이터베이스 작업을 수행할 수 있도록 다양한 기능과 방법을 제공합니다. 이 기사에서는 PDO를 사용하여 복잡한 SQL 쿼리 문을 실행하고 해당 코드 예제를 첨부하는 방법을 소개합니다. 데이터베이스에 연결

Union을 사용하여 MySQL에서 Like 문을 최적화하는 방법 Union을 사용하여 MySQL에서 Like 문을 최적화하는 방법 May 31, 2023 pm 03:55 PM

Union을 사용하여 Like 문 최적화 1) 쿼리에서 비교를 위해 or 연산자를 사용해야 하는 경우가 있습니다. where 절에서 or 키워드가 너무 자주 사용되면 MySQL 최적화 프로그램이 실수로 레코드를 검색하기 위해 전체 테이블 스캔을 선택하게 될 수 있습니다. Union 절을 사용하면 특히 쿼리 중 하나에 최적화된 인덱스가 있고 다른 쿼리에도 최적화된 인덱스가 있는 경우 쿼리 실행 속도가 빨라집니다. 예를 들어 각각 first_name과 last_name에 인덱스가 있는 경우 다음 쿼리 문을 실행합니다. mysql>select*fromstudentswherefirst_namelike'A

MySQL에서 on, in, as 및 where의 차이점은 무엇입니까? MySQL에서 on, in, as 및 where의 차이점은 무엇입니까? Jun 03, 2023 am 11:37 AM

Mysqlon, in, as의 차이점 where 답변: Where 쿼리 조건은 내부 및 외부 연결에 대해 별칭으로 on을 사용하여 특정 값이 특정 조건에서 2개의 테이블을 생성하는지 쿼리합니다. 학생, 점수학생: 점수: whereSELECT*FROMstudentWHEREs_sex=' Male'예: onSELECT*FROMstudentLEFTJOINscoreonstudent.s_id=score.s_id; on과 where의 조합: SELECT*FROMstudentLEFTJOINs

See all articles