전에 문제가 발생했습니다. mysql 데이터베이스에 두 개의 테이블이 있습니다. 하나의 주소 테이블에는 주소 테이블의 세 가지 위치 정보에 해당하는 세 개의 필드가 있습니다(매우 이상한 테이블 형식). ), 그림과 같이:
이제 사용자 테이블의 데이터를 쿼리하고, 시/도 값을 기준으로 주소 테이블에서 해당 위치 정보(이름)를 쿼리해야 합니다.
SQL에 능숙하지 않아서 일반적인 논리를 알아냈습니다
먼저 사용자 테이블에서 지방과 도시 세 필드의 값을 가져와야 합니다. 일반적인 쿼리 방법은
SELECT province,city,district FROM `user` WHERE id =1;
이것은 비교적 간단합니다. get 결과는 그림과 같이 1행 3열의 값입니다.
이것이 일반적인 작성 방법이며, 이 결과를 다음과 같이 사용합니다.
물론 아이디어는 좋은 것 같지만, 쿼리 결과가 세 부분으로 나누어져 있어 후속 쿼리에 도움이 되지 않습니다. 쿼리하기 전에 처리하는 것은 너무 번거로운 일입니다. 이때 CONCAT_WS 및 CONCAT라는 두 가지 함수를 사용해야 하며, 두 함수의 기능은 결과를 문자열로 연결하는 것입니다. . 여기서는 소개하지 않겠습니다 :)
그러므로 쿼리문은 다음과 같이 작성할 수 있습니다.SELECT CONCAT_WS(',',province,city,district) AS ids FROM `user` WHERE id =1;
결과는 그림과 같습니다.
이 결과를 사용하면 기본적으로 주소 정보를 쿼리할 수 있습니다. 주소 정보를 조회해서 해당 스플라이싱도 했기 때문에 최종 SQL은 이렇습니다
SELECT GROUP_CONCAT(`name`) FROM address WHERE id IN (SELECT CONCAT_WS(',',province,city,district) FROM `user` WHERE id =1);
이상적인 결과는 그림과 같습니다 :
실제로 이 명령문은 우리가 원하는 결과를 얻을 수 없습니다. 이유는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!