MySQL 쿼리 결과에서 다중 열 접합 쿼리를 구현하는 방법

王林
풀어 주다: 2023-06-01 23:40:05
앞으로
2661명이 탐색했습니다.

전에 문제가 발생했습니다. mysql 데이터베이스에 두 개의 테이블이 있습니다. 하나의 주소 테이블에는 주소 테이블의 세 가지 위치 정보에 해당하는 세 개의 필드가 있습니다(매우 이상한 테이블 형식). ), 그림과 같이:

MySQL 쿼리 결과에서 다중 열 접합 쿼리를 구현하는 방법

MySQL 쿼리 결과에서 다중 열 접합 쿼리를 구현하는 방법

이제 사용자 테이블의 데이터를 쿼리하고, 시/도 값을 기준으로 주소 테이블에서 해당 위치 정보(이름)를 쿼리해야 합니다.

SQL에 능숙하지 않아서 일반적인 논리를 알아냈습니다

먼저 사용자 테이블에서 지방과 도시 세 필드의 값을 가져와야 합니다. 일반적인 쿼리 방법은

SELECT province,city,district FROM `user` WHERE id =1;
로그인 후 복사

이것은 비교적 간단합니다. get 결과는 그림과 같이 1행 3열의 값입니다.

MySQL 쿼리 결과에서 다중 열 접합 쿼리를 구현하는 방법

이것이 일반적인 작성 방법이며, 이 결과를 다음과 같이 사용합니다.

물론 아이디어는 좋은 것 같지만, 쿼리 결과가 세 부분으로 나누어져 있어 후속 쿼리에 도움이 되지 않습니다. 쿼리하기 전에 처리하는 것은 너무 번거로운 일입니다. 이때 CONCAT_WS 및 CONCAT라는 두 가지 함수를 사용해야 하며, 두 함수의 기능은 결과를 문자열로 연결하는 것입니다. . 여기서는 소개하지 않겠습니다 :)

그러므로 쿼리문은 다음과 같이 작성할 수 있습니다.SELECT CONCAT_WS(',',province,city,district) AS ids FROM `user` WHERE id =1;결과는 그림과 같습니다.

MySQL 쿼리 결과에서 다중 열 접합 쿼리를 구현하는 방법

이 결과를 사용하면 기본적으로 주소 정보를 쿼리할 수 있습니다. 주소 정보를 조회해서 해당 스플라이싱도 했기 때문에 최종 SQL은 이렇습니다

SELECT GROUP_CONCAT(`name`) FROM address WHERE id IN (SELECT CONCAT_WS(',',province,city,district) FROM `user` WHERE id =1);
로그인 후 복사

이상적인 결과는 그림과 같습니다 :

MySQL 쿼리 결과에서 다중 열 접합 쿼리를 구현하는 방법

실제로 이 명령문은 우리가 원하는 결과를 얻을 수 없습니다. 이유는 SELECT CONCAT_WS(',',province,city,district) FROM `user` WHERE id =1의 결과는 문자열이지만 쿼리 조건에서 문자열을 In의 조건으로 사용할 수 없기 때문에 쿼리 결과는

다시 생각해보면 문제가 없는데 어떻게 이 문자열을 쿼리 조건으로 사용하여 최종적으로 원하는 결과를 얻을 수 있을까요? 의 쿼리 조건은 숫자만 가능하므로 문자열 쿼리를 지원하지 않으므로 여기에도 instr이라는 함수가 필요합니다. 솔직히 말해서 이 함수를 처음 알게 되었기 때문에 실제로는 조금밖에 알지 못합니다. mysql 추가, 삭제, 수정 및 확인에 대해 조금 설명하겠습니다. ㅎㅎ 그럼 이 함수의 효과를 시험해 보겠습니다. 최종 SQL은

SELECT
  GROUP_CONCAT(`name`)
FROM
  address
WHERE INSTR(
    (SELECT
      CONCAT_WS(',', province, city, district)
    FROM
      `user`
    WHERE id = 1),
    id
  ) ;
로그인 후 복사

로 실행됩니다. 최종 결과도 우리가 원하는 것입니다. 물론 위의 명령문은 결과만 구현합니다. 세부 사항은 비즈니스 요구에 따라 수정될 수 있습니다. mysql의 기능은 매우 강력하다고 할 수 있습니다. 우리는 앞으로도 더 많은 것을 배워야 합니다.

그래서 최종 SQL은 다음과 같습니다.

rree

위 내용은 MySQL 쿼리 결과에서 다중 열 접합 쿼리를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿