MySQL 복합 조인 쿼리 문제

EastSw

아래에 설명 된대로 5 개의 mysql 테이블이 있습니다. 클리닉 테이블

id
name

d_location_subscription 테이블

id
clinic_id
t_id   //t_id will contain a foreign key of d_cities, d_states or d_countries table
type   "country" "state" "city"

d_countries 테이블

id
name
code

d_states 테이블

id
d_country_id
name
code

d_city 테이블

id
d_state_id
name
code

d_location_subscription 테이블은 위치 (도시, 주 또는 국가 일 수 있음)에 대한 클리닉의 구독을 기록하는 데 사용됩니다. d_location_subscription 테이블을 사용하여 특정 클리닉에 대해 모든 구독 도시를 가져올 것으로 예상합니다.

예를 들어 클리닉 A가 텍사스 주에 가입되어 있다면 클리닉 A의 모든 도시 ID를 얻을 수 있습니다.

나는 다음과 같은 SQL 쿼리를 만들었는데, 추악 해 보이지만 내가 원하는 것을 가까운 결과를 생성합니다.

select 
    `d`.`id` AS `clinic_id`,
    if((`dct`.`id` is not null),`dct`.`id`,if((`dct1`.`id` is not null),`dct1`.`id`,`dct2`.`id`)) AS `d_city_id` 
from ((((((((
    `d_location_subscriptions` `dls` 
    join `clinics` `d` 
        on((`d`.`id` = `dls`.`clinic_id`))) 
    left join `d_countries` `dc` 
        on(((`dc`.`id` = `dls`.`t_id`) and (`dls`.`type` = 'country')))) 
    left join `d_states` `ds` 
        on((`ds`.`d_country_id` = `dc`.`id`))) 
    left join `d_cities` `dct2` 
        on((`dct2`.`d_state_id` = `ds`.`id`))) 
    left join `d_states` `ds1` 
        on(((`ds1`.`id` = `dls`.`t_id`) and (`dls`.`type` = 'state')))) 
    left join `d_cities` `dct` 
        on((`dct`.`d_state_id` = `ds1`.`id`))) 
    left join `d_cities` `dct1` 
        on(((`dct1`.`id` = `dls`.`t_id`) and (`dls`.`type` = 'city')))) 
) 

d_location_subscription 테이블에 "country"유형의 레코드가있을 때 다음과 같은 결과를받습니다. 반환 된 총 레코드 수는 d_states 테이블 레코드 수와 같습니다.

이것이 결과입니다

위의 쿼리를 변경하여 Null 값을 어떻게 제거해야합니까? 그리고 이것이 유사한 기능을 얻는 올바른 방법인지 저에게 조언하십시오. 미리 감사드립니다 :)

베이지

IF () 계산 열은 본질적으로 STT LCU가 제공하려고했던 것입니다. 그러나 어떤 이유로 든 직접 사용할 수는 없습니다.

쿼리를 다시 작성했지만 데이터를 얻기 위해 테이블 ​​/ 관계의 기원을 더 잘 따르기 위해 다른 별칭을 사용했습니다. 결국, "ID"값 중 하나를 NOT NULL로 테스트 할 위치를 추가했습니다. ALL Null이면 레코드를 제외해야합니다.

select 
      d.id AS clinic_id,
      if(CityViaState.id is not null, CityViaState.id,
         if( ByCity.id is not null, ByCity.id, CityViaCountry.id )) AS d_city_id 
   from 
      d_location_subscriptions dls 
         join clinics d 
            ON dls.clinic_id = d.id 

         left join d_countries ByCountry 
            ON dls.t_id = ByCountry.id 
            and dls.type = 'country'
            left join d_states StateViaCountry 
               ON ByCountry.id = StateViaCountry.d_country_id 
               left join d_cities CityViaCountry 
                  ON StateViaCountry.id = CityViaCountry.d_state_id 

         left join d_states ByState 
            ON dls.t_id = ByState.id 
            and dls.type = 'state'
            left join d_cities CityViaState 
               ON ByState.id = CityViaState.d_state_id

         left join d_cities ByCity 
            ON dls.t_id = ByCity.id 
            and dls.type = 'city'
   where
         CityViaState.id is not null
      OR ByCity.id is not null
      OR CityViaCountry.id is not null

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

내부 조인 MySQL 쿼리 문제

분류에서Dev

왼쪽 조인의 MySQL 쿼리 문제

분류에서Dev

2 개의 쿼리를 결합하는 MySQL-내부 조인 문제

분류에서Dev

복잡한 MySQL 조인 쿼리 작성

분류에서Dev

MySQL 조인 쿼리의 구문 오류

분류에서Dev

codeigniter 조인 쿼리 문제

분류에서Dev

mysql보기 쿼리 미확인 문제

분류에서Dev

mysql의 성능은 하위 쿼리 및 제한과 조인합니다.

분류에서Dev

MySQL 쿼리 문제

분류에서Dev

MySQL : 복잡한 조인 된 쿼리에서 개별 행을 합하는 방법

분류에서Dev

조인이있는 mysql 쿼리가 결과를 반복합니다.

분류에서Dev

Elasticsearch 쿼리 필터 조합 문제

분류에서Dev

mySQL 다른 조합 쿼리

분류에서Dev

mySQL 다른 조합 쿼리

분류에서Dev

MySQL- 조합 두 쿼리

분류에서Dev

MySQL 쿼리 WHERE AND 및 OR 조합

분류에서Dev

mysql 조인 문제

분류에서Dev

쿼리를 조인 한 간단한 두 테이블의 MySQL 성능 문제

분류에서Dev

테이블 쿼리 : 복합 조인

분류에서Dev

중복 결과를 표시하는 왼쪽 조인 쿼리 문제

분류에서Dev

복잡한 조인 된 MySQL 쿼리의 필드 재정의

분류에서Dev

mysql 조인 쿼리 사용시 중복 결과

분류에서Dev

MySQL의 복잡한 조인 및 MAX () 쿼리

분류에서Dev

조인 내 하위 쿼리의 MySQL 중복 열

분류에서Dev

MySQL 자체 조인 쿼리?

분류에서Dev

MySQL 쿼리 및 조인

분류에서Dev

MySQL 조인 쿼리 GROUP BY

분류에서Dev

쿼리 왼쪽 조인 mysql

분류에서Dev

MySQL 쿼리 수 및 조인