2017-03-02 2 views
0

나는 3 개의 테이블 공항, 위치 및 위치 힌트를 가지고 있습니다. 위치 테이블을 업데이트 한 후 더 이상 위치 정보의 n_airports 열에없는 공항 이름을 삭제해야합니다. 여기서 n_airpots 열은 혼수 상태로 표시된 공항 코드 모음입니다. Lik % code %로 선택하여 하나씩 삭제하려고했지만 유용하지는 않습니다.
이 한 Statment는다른 테이블에 코드가없는 행을 삭제하십시오.

DELETE 
FROM location_hint 
WHERE type = 2 AND name NOT IN 
(
    SELECT a.name 
    FROM airports a 
    WHERE a.code IN 
    (
     SELECT n_airports 
     FROM location 

     ) 
) 

공항 테이블을 모두에게

CREATE TABLE airports (
    _id INTEGER, 
    code TEXT, 
    name TEXT, 
    PRIMARY KEY(_id) 
) 

enter image description here 위치 테이블

CREATE TABLE `location` (
    `_id` integer, 
    `country` text, 
    `city` text, 
    `n_airports` text, 
    PRIMARY KEY(_id) 
) 

enter image description here 위치 힌트 테이블

을 삭제하는 것
CREATE TABLE "location_hint" (
    `_id` INTEGER PRIMARY KEY AUTOINCREMENT, 
    `name` TEXT NOT NULL, 
    `type` INTEGER NOT NULL, 
    `country` TEXT, 
    `city` TEXT 
) 

enter image description here

+1

당신이 당신의 데이터 모델을 리모델링의 concidered 적이 테스트 해는? 텍스트 필드에서 쉼표로 구분 된 값으로 관련 레코드를 갖는 것은 관계형 데이터베이스를 갖는 목적을 상쇄합니다. – Morten

+0

@Morten 유감스럽게도 프로젝트의 유산 부분과 너무 많은 부분이 묶여있다 – Yarh

답변

2

(3210)는, 테스트 메모장에 신속하게 낙서를하지 -하지만

DELETE 
FROM location_hint 
WHERE type = 2 AND name IN 
(
    SELECT a.name 
    FROM airports 
    MINUS 
    SELECT a.name 
    FROM airports a 
    WHERE EXISTS(
     SELECT 1 
     FROM location 
     WHERE INSTR(','||n_airports||',' , ','||a.code||',') > 0 
     ) 
) 
+0

그 코드가 얼어 붙는다 ( – Yarh

+0

도, 왜 당신이 concatenete ', || n_airports ||', '?) 그것은 이미 KLAX, JNY, PTT 등 – Yarh

+0

정지 때문에 외부 대부분의 쿼리 될 수 있습니다. NOT IN' 데이터를 삭제하는 매우 조정 방법이 아니다'사용. 이 위치에서 1 을 선택합니다 ( 가의'존재 공항에서 a.name 을 선택 테스트 WHERE INSTR (','| 'n_airports ||', ',') '0> )' 부분 먼저 –

관련 문제