내가 모르는 경우 다른 행에서 값을 반환하지만 내가 가족과 아과 (family_table)이있는 테이블이가능한 경우
를 요청할 수 있다고 생각 :
family_id family_name parent_id
1 Family 1 null
2 Family 2 null
3 Subfamily 1.1 1
4 Subfamily 1.2 1
5 Family 3 null
6 Subfamily 2.1 2
을
은 그 때 나는이 같은 일부 family_id을 반환하는 복잡한 SELECT를 가지고 4. 그런 다음
나는 다음과 같은 정보를 반환해야합니다 :
principal_id family_name subfamily_id subfamily_name
2 Family 2 null null
1 Family 1 4 Subfamily 1.2
을
편집 : 결과가 표시되는 방식을 변경하거나 충분히 명확한 한 다른 것을 변경하는 데는 신경 쓰지 않아도됩니다. IT는 가족 같은 아과의 결과를 반환 AS, 아래 이러한 시도가 작동하지 않을 것입니다, 그리고 그렇지 않은 :
SELECT
CASE
WHEN ft.parent_id IS NULL THEN
ft.family_id
ELSE
ft.parent_id
END AS principal_id,
/*I was thinking something like this, but I don't know how to select another row value here, or if there would be another way
CASE
WHEN ft.parent_id IS NULL THEN
ft.family_name
ELSE
*Family name from the parent*
END AS family_name*/
FROM
family_table ft
LEFT JOIN family_table ft2 ON ft2.parent_id = ft.family_id
WHERE
ft.family_id IN (2,4/*complicated select*/)
편집 : 여기에
내가 지금까지 한 일이다 내가 필요로하는 서브 패밀리의 부모 ID에 가입하십시오. 이 같은
아니면 뭔가 :
SELECT
ft.family_id as principal_id,
ft.family_name as family_name,
ft2.family_id as subfamily_id,
ft2.family_name as subfamily_name
FROM ft.family_table
LEFT JOIN ft2.family_table ON ft2.parent_id = ft.family_id
WHERE
/*ft.family_id OR ft2.parent_id*/ IN (2,4/*complicated select*/)
나는 ft.family_id IN (2,4/*complicated select*/) OR cf2.parent_id IN (2,4/*complicated select*/)
를 수행하여 괴물 같은 선택을 반복하고 싶지 않아요. 내가 지나치게 복잡하게 모든 것을 나는 느낌 ... 여기
는 IT가 최종 QUERY, 계정에 허용 대답을 촬영하기 (경우 누군가에 궁금) IS
SELECT
COALESCE (ft2.family_id, ft.family_id) AS family_id,
COALESCE (ft2.family_name, ft.family_name) AS family_name,
CASE WHEN ft.parent_id IS NOT NULL THEN ft.family_id
END AS subfamily_id,
CASE WHEN ft.parent_id IS NOT NULL THEN ft.family_name
END AS subfamily_name
FROM family_table ft
JOIN (/* complicated select */) AS t ON t.family_id IN (ft.family_id, ft.parent_id)
LEFT JOIN family_table ft2 ON ft2.family_id = ft.parent_id
자체 조인을 사용한 마지막 시도의 문제점은 무엇입니까? 그게 제가 쓰는 것입니다. – Shadow
그런 다음 복잡한 선택에 참여하고 간단한 'COPLICATED_SELECT_COLUMN IN (parent_id, family_id)'를 사용하십시오. – sagi
@Shadow, 문제는 ft.family_id 또는 cf2.parent_id IN (2,4/* 복잡한 선택 * /)이 작동하지 않습니다. , 나는 매우 길기 때문에 연령이 오래 걸리기 때문에 IN 내부의 선택을 반복하고 싶지 않습니다. – Tyrannogina