programing

WHEREIN에 SELECT결과를 사용하여 Alias.

sourcetip 2022. 9. 19. 22:47
반응형

WHEREIN에 SELECT결과를 사용하여 Alias.

나는 그것은 내가 SELECTWHEREIN은 사용하는 의문이 있다.여기에 쿼리가:

SELECT tville_id, tville_nom, tville_etat
FROM TAB_ZONE   
INNER JOIN TAB_VILLES ON tville_id = tzone_cidade
WHERE tzone_unidade1 = 1 
   OR tzone_unidade2 = 1 
   OR tzone_unidade3 = 1 
   OR tzone_unidade1 IN (SELECT tunidade_id FROM TAB_UNIDADE WHERE tunidade_parent = 1)
   OR tzone_unidade2 IN (SELECT tunidade_id FROM TAB_UNIDADE WHERE tunidade_parent = 1)
   OR tzone_unidade3 IN (SELECT tunidade_id FROM TAB_UNIDADE WHERE tunidade_parent = 1)
ORDER BY tville_etat, tville_nom

그것은 하지만, 여러분이 볼 수 있는 세 WHERE절의"tunidade_id SELECT"성명이 효과가 있다.방법이 있는 별칭, 그래서 이걸 한번만 공연을 이번 SELECT의 결과물을 이용하나요?(그리고 그것은 usefull?)

감사합니다.

MariaDB 10.2려면 여러분은 이 목적으로common-table 표현을 사용할 수 있다.

WITH cte_tunidade AS (SELECT tunidade_id FROM TAB_UNIDADE WHERE tunidade_parent = 1)
SELECT tville_id, tville_nom, tville_etat
FROM TAB_ZONE   
INNER JOIN TAB_VILLES ON tville_id = tzone_cidade
WHERE tzone_unidade1 = 1 
   OR tzone_unidade2 = 1 
   OR tzone_unidade3 = 1 
   OR tzone_unidade1 IN (SELECT * FROM cte_tunidade)
   OR tzone_unidade2 IN (SELECT * FROM cte_tunidade)
   OR tzone_unidade3 IN (SELECT * FROM cte_tunidade)
ORDER BY tville_etat, tville_nom

그것이 당신 눈에 띄는 성능 향상-나는 최선의 방법을 찾기 위해입니다; 하지만 적어돈 쿼리는 더 계속할 수 있는 이 방법 같군요

없었지만, 저의 이해에 이와 같은 일을 봐야 합니다. 확인되지 않고 있다.

SELECT tville_id, tville_nom, tville_etat
FROM TAB_ZONE   
INNER JOIN TAB_VILLES ON tville_id = tzone_cidade
JOIN (SELECT tunidade_id FROM TAB_UNIDADE WHERE tunidade_parent = 1 UNION SELECT 1) x on x.tunidade_id in (tzone_unidade1, tzone_unidade2, tzone_unidade3)
ORDER BY tville_etat, tville_nom

그렇지 않다면 잘못된 아래 조건들을 하나로 병합할 수 있다.

OR tzone_unidade1 IN (SELECT tunidade_id FROM TAB_UNIDADE WHERE tunidade_parent = 1)
OR tzone_unidade2 IN (SELECT tunidade_id FROM TAB_UNIDADE WHERE tunidade_parent = 1)
OR tzone_unidade3 IN (SELECT tunidade_id FROM TAB_UNIDADE WHERE tunidade_parent = 1)

같은 것려면

OR (tzone_unidade1,tzone_unidade2,tzone_unidade3) IN (SELECT tunidade_id FROM TAB_UNIDADE WHERE tunidade_parent = 1)

더 나은단에 걸쳐 배열 splay지 않는 것이다.대신에 다른 테이블에 여러줄로 이루어져 있다.그러한으로, 반복 쿼리, CTEs, 성능 문제 등을 피할 수 있

언급URL:https://stackoverflow.com/questions/43903001/alias-for-using-select-result-in-where-in

반응형