>  기사  >  데이터 베이스  >  mysql에서 조건에 문자열을 사용하는 방법은 무엇입니까

mysql에서 조건에 문자열을 사용하는 방법은 무엇입니까

王林
王林앞으로
2023-05-31 10:17:031728검색

mysql의 in 조건은 문자열을 사용합니다

Scenario

sql에서 in을 조건으로 사용할 경우 쿼리 조건을 만족시키기 위해 매개변수를 사용하며, 문자열을 직접 전달하면 조건을 만족할 수 없습니다.

select id,name from user where id in(?)

Method

FIND_IN_SET(str,strlist) 함수 사용

select id,name from user where FIND_IN_SET(id,#{strlist})
  • str: 조건부 필드str: 条件字段

  • strlist

strlist: 일치 값 집합

select id,name from user where FIND_IN_SET(id,'111,22,333')

조건 매개변수의 MySQL 쿼리가 쉼표가 포함된 문자열이면 쿼리 결과가 잘못되었습니다

다음 sql이 있는 경우:
SELECT
    (
        SELECT
            GROUP_CONCAT(content)
        FROM
            account_limit_user ur
        WHERE
            ur.id IN (T1.limit_user)
        GROUP BY
            ur.id
    ) AS limit_user
FROM
    account T1
WHERE
    1 = 1

T1.limit_user는 계정 테이블에서 쿼리한 값입니다

‘9,8,4&rsquo ;

SQL 쿼리의 올바른 쿼리 결과는 다음과 같습니다.

권장하지 않음, 고객 홍보, 고객 홍보

실제 결과는 다음과 같습니다.

권장하지 않음

이유:

에 있는 경우 mysql이 문자열이면 자동으로 int형으로 변환된다. 내부적으로는 다음과 같은 방법을 사용한다.

CAST('4,3' AS INT)

쉼표를 세미콜론으로 잘못 썼기 때문에 "4,3"은 "4;"가 된다. 위 쿼리 SQL의 결과에는 첫 번째 쿼리만 포함됩니다.

솔루션🎜
FIND_IN_SET('查询的值(如:1)', '使用逗号隔开的字符串集合,如:('1,2,3')')
🎜올바른 sql🎜
SELECT
    (
        SELECT
            GROUP_CONCAT(content)
        FROM
            account_limit_user ur 
        WHERE
            FIND_IN_SET(ur.id, T1.limit_user) > 0
    ) AS limit_user,
    T1.limit_user limit_userid
FROM
    account T1
WHERE
    1 = 1

위 내용은 mysql에서 조건에 문자열을 사용하는 방법은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제