반응형
FROM 절에서 하위 쿼리를 사용하여 MariaDB 쿼리를 최적화하려면 어떻게 해야 합니까?
이 두 테이블을 상상해 보세요.
표 A
ID col1 col2 col3
1 foo baz bar
2 ofo zba rba
3 oof abz abr
표 B
A_ID field_name field_value
1 first Jon
1 last Doe
2 first Adam
2 last Smith
등..
이제 쿼리를 가지고 싶습니다(현재의 쿼리는 이렇게 표시됨).
SELECT
a.id,
a.col1,
a.col2,
(SELECT field_value FROM B WHERE A_ID = a.id AND field_name = 'first') as first_name,
(SELECT field_value FROM B WHERE A_ID = a.id AND field_name = 'last') as last_name
FROM A a
WHERE (SELECT COUNT(*) FROM B WHERE A_ID = a.id) = 2;
이 쿼리는 작동 중입니다.제가 이루고 싶은 것은 이런 것이 될 것입니다.
SELECT
a.id,
a.col1,
a.col2,
(SELECT field_value FROM b WHERE b.field_name = 'first') as first_name,
(SELECT field_value FROM b WHERE b.field_name = 'last') as last_name
FROM
A a,
(SELECT field_value, field_name FROM B WHERE A_ID = a.id) b
WHERE (SELECT COUNT(*) FROM b) = 2;
제 접근 방식은 어떻게 정확하게 보일까요?B 테이블의 여러 질의를 제거할 수 있는 다른 방법은 없습니까?
감사해요!
상관 관계가 있는 하위 쿼리를 조인으로 대체합니다.
SELECT
a.id,
a.col1,
a.col2,
b1.field_value AS fv1,
b2.field_value AS fv2
FROM A a
LEFT JOIN B b1
ON a.id = b1.A_ID AND b1.field_name = 'first'
LEFT JOIN B b2
ON a.id = b2.A_ID AND b2.field_name = 'last';
이 대답은 주어진 A 레코드의 왼쪽 조인이 B 테이블의 최대 하나의 레코드와 일치한다고 가정합니다. 그러나 상관된 하위 쿼리가 단일 값만 반환하는 데는 어쨌든 요구 사항입니다.
언급URL : https://stackoverflow.com/questions/57324589/how-do-i-optimize-mariadb-query-with-subqueries-in-from-clause
반응형
'programing' 카테고리의 다른 글
| 인덱싱 Pandas 데이터 프레임: 정수 행, 명명된 열 (0) | 2023.10.19 |
|---|---|
| lxml에서 요소를 제거하는 방법 (0) | 2023.10.19 |
| "#TYPE" 라인 없이 PowerShell을 사용하여 CSV를 출력하려면 어떻게 해야 합니까? (0) | 2023.10.19 |
| C 및 Linux에서 소켓에 사용 가능한 데이터 양을 확인하는 방법 (0) | 2023.10.14 |
| 데이터베이스 행에 있는 문자열의 고유 길이를 어떻게 계산할 수 있습니까? (0) | 2023.10.14 |