Я пытаюсь найти «Найти актеров, которые никогда не были безработными более 3 лет подряд».
Схема таблицы выглядит следующим образом
-------------------- ----------------------- ----------------------
| Movie | | Person | | Cast |
-------------------- ------------------------ ----------------------
| MovieID | year | | PersonID | Gender | | MovieID | PersonID |
-------------------- ------------------------ ----------------------
Я пытался присоединиться иделать подзапросы.Однако мой SQL-оператор работает всегда на sqlite
SELECT DISTINCT TRIM(A.PID), A.NAME FROM PERSON A
WHERE TRIM(A.PID) NOT IN (
SELECT DISTINCT TRIM(B.PID) FROM M_CAST B, MOVIE C WHERE TRIM(B.MID) =
TRIM(C.MID) AND EXISTS (
SELECT TRIM(D.MID) FROM M_CAST D, MOVIE E WHERE TRIM(D.MID) = TRIM(E.MID)
AND TRIM(B.PID) = TRIM(D.PID) AND (CAST (SUBSTR(TRIM(E.YEAR),
LENGTH(TRIM(E.YEAR)) -3 , 4) AS INT) - 3) >
CAST (SUBSTR(TRIM(C.YEAR), LENGTH(TRIM(C.YEAR)) -3 , 4) AS INT) AND NOT
EXISTS (
SELECT TRIM(F.MID) FROM M_CAST F, MOVIE G WHERE TRIM(F.MID) = (G.MID) AND
TRIM(B.PID) = TRIM(F.PID) AND
CAST (SUBSTR(TRIM(C.YEAR), LENGTH(TRIM(C.YEAR)) -3 , 4) AS INT) < CAST
(SUBSTR(TRIM(G.YEAR), LENGTH(TRIM(G.YEAR)) -3 , 4) AS INT) AND
CAST (SUBSTR(TRIM(G.YEAR), LENGTH(TRIM(G.YEAR)) -3 , 4) AS INT) < CAST
(SUBSTR(TRIM(E.YEAR), LENGTH(TRIM(E.YEAR)) -3 , 4) AS INT)
)
)
)
CAST (SUBSTR(TRIM(C.YEAR), LENGTH(TRIM(C.YEAR)) -3 , 4) AS INT) #was used
since the year had some special characters and was used to extract only the
last 4 digits (year)
Ожидаемый результат - отобразить все имена участников, которые не были безработными в течение более 3 лет, но мой запрос выполняется вечно, но безрезультатно.