이 SQL 솔루션은 천재입니다!!🤩
오늘 제가 발견한 그러한 문제 중 하나는 아래에서 논의할 것입니다.
데이터베이스(608. 트리 노드)
문제 설명
트리에서 각 노드의 유형을 찾아야 합니다. 루트, 내부 또는 리프 노드인지 여부.
Input:
Tree table:
+----+------+
| id | p_id |
+----+------+
| 1 | null |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 2 |
+----+------+
Output:
+----+-------+
| id | type |
+----+-------+
| 1 | Root |
| 2 | Inner |
| 3 | Leaf |
| 4 | Leaf |
| 5 | Leaf |
+----+-------+
Checkout the description thoroughly from the link above and try get an idea of solving it before checking out below approaches
1. 나의 접근법
CASE
를 사용하여 해결했습니다.핵심적인 세부 사항에 들어가고 싶지는 않지만 여기에 개요가 있습니다.
1.1 p_id가 null이면 루트 노드입니다.
1.2 id가 p_id에 있으면 내부 노드입니다.
1.3 그렇지 않으면 리프 노드입니다.
2. 천재적인 접근 방식(적어도 제 생각에는)
If
기능 사용코드는 다음과 같습니다.
SELECT
atree.id,
IF(ISNULL(atree.p_id),
'Root',
IF(atree.id IN (SELECT p_id FROM tree), 'Inner','Leaf')) Type
FROM
tree atree
ORDER BY atree.id
그것을 분해하자,
atree
를 트리 테이블의 별칭으로 설정합니다. id
를 선택합니다. 여기서 흥미로운 점!!!!
3. If 함수 생성
General usage of If function 👇
`If(10>27, YES, NO)`
It states that if condition `10>27` is true then **YES** else **NO**.
지금,
IF(ISNULL(atree.p_id),'Root'
상태,p_id
가 null이면 루트로 설정합니다.(그리고 마찬가지로 1.1의 조건이 만족되었습니다)
4. 또 다른 If 함수가
first If function as an Else condition
내부에 내장되어 있습니다.IF(atree.id IN (SELECT p_id FROM tree), 'Inner','Leaf')
이것은 다음과 같이 말합니다.id
가 p_id
에 있으면 'Inner'로 설정하고 그렇지 않으면 'Leaf'로 설정합니다.(그래서 우리의 조건 1.2, 1.3이 만족되었어요🤩)
The genius behind this solution is designing it by utilizing of simple functions ordered in a perfect way.
As complex as it may seem, as simple it is I believe.
여기까지 했다면 이것에 대해 어떻게 생각하는지 알려주고 흥미로운 문제/해결책이 더 있으면 댓글에 언급하십시오.
Reference
이 문제에 관하여(이 SQL 솔루션은 천재입니다!!🤩), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/adityanikhil/this-sql-solution-is-genius-3ca6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)