내부 조인 동일 테이블
저는 같은 테이블에서 몇 개의 행을 가져오려고 합니다.사용자 테이블입니다. 사용자가 가지고 있습니다.user_id
그리고.user_parent_id
.
나는 그것을 받아야 합니다.user_id
행과user_parent_id
다음과 같은 코드를 작성했습니다.
SELECT user.user_fname, user.user_lname
FROM users as user
INNER JOIN users AS parent
ON parent.user_parent_id = user.user_id
WHERE user.user_id = $_GET[id]
그런데 결과가 안 나와요.사용자 레코드와 상위 레코드를 표시합니다.
문제는 당신에게 있다고 생각합니다.JOIN
조건.
SELECT user.user_fname,
user.user_lname,
parent.user_fname,
parent.user_lname
FROM users AS user
JOIN users AS parent
ON parent.user_id = user.user_parent_id
WHERE user.user_id = $_GET[id]
편집: 다음을 사용해야 합니다.LEFT JOIN
부모가 없는 사용자가 있는 경우
UNION은 다음과 같이 사용할 수 있습니다.
SELECT user_fname ,
user_lname
FROM users
WHERE user_id = $_GET[id]
UNION
SELECT user_fname ,
user_lname
FROM users
WHERE user_parent_id = $_GET[id]
아마도 이것이 선택 사항이어야 할 것입니다(질문을 올바르게 이해한 경우).
select user.user_fname, user.user_lname, parent.user_fname, parent.user_lname
... As before
쿼리는 정상적으로 작동하지만 별칭을 사용해야 합니다.parent
다음과 같이 상위 테이블의 값을 표시합니다.
select
CONCAT(user.user_fname, ' ', user.user_lname) AS 'User Name',
CONCAT(parent.user_fname, ' ', parent.user_lname) AS 'Parent Name'
from users as user
inner join users as parent on parent.user_parent_id = user.user_id
where user.user_id = $_GET[id];
테이블이 어떻게 생성되는지는 모르겠지만 이것을 시도해 보십시오...
SELECT users1.user_id, users2.user_parent_id
FROM users AS users1
INNER JOIN users AS users2
ON users1.id = users2.id
WHERE users1.user_id = users2.user_parent_id
날짜표, 색상표 및 결합 가능한 세 개의 표를 사용하여 좋고 간단한 시나리오로 이 질문에 답하도록 노력하겠습니다.
우선 가치를 보다table
와의 날짜표.primary key
에 할당된.column
dateid:
mysql> select * from datetable;
+--------+------------+
| dateid | datevalue |
+--------+------------+
| 101 | 2015-01-01 |
| 102 | 2015-05-01 |
| 103 | 2016-01-01 |
+--------+------------+
3 rows in set (0.00 sec)
이제 두 번째로 이동합니다. table
로 표시할 수 있는 값primary key
에 할당된.column
colorid:
mysql> select * from colortable;
+---------+------------+
| colorid | colorvalue |
+---------+------------+
| 11 | blue |
| 12 | yellow |
+---------+------------+
2 rows in set (0.00 sec)
그리고 우리의 마지막 3분의 1. table
연대 가능한 primary keys
및 값은 다음과 같습니다.
mysql> select * from jointable;
+--------+---------+
| dateid | colorid |
+--------+---------+
| 101 | 11 |
| 102 | 12 |
| 101 | 12 |
+--------+---------+
3 rows in set (0.00 sec)
이제 우리의 조건은 파란색과 노란색을 모두 가진 날짜 ID를 찾는 것입니다.
질문은 다음과 같습니다.
mysql> SELECT t1.dateid FROM jointable AS t1 INNER JOIN jointable t2
-> ON t1.dateid = t2.dateid
-> WHERE
-> (t1.colorid IN (SELECT colorid FROM colortable WHERE colorvalue = 'blue'))
-> AND
-> (t2.colorid IN (SELECT colorid FROM colortable WHERE colorvalue = 'yellow'));
+--------+
| dateid |
+--------+
| 101 |
+--------+
1 row in set (0.00 sec)
희망, 이것은 많은 사람들에게 도움이 될 것입니다.
언급URL : https://stackoverflow.com/questions/14796738/inner-join-same-table
'programing' 카테고리의 다른 글
Android Studio에서 데이터베이스 파일의 내용 보기 (0) | 2023.09.02 |
---|---|
C++ 및 g++을 사용하여 mysql.h에서 출력을 가져오는 동안 오류가 발생했습니다. (0) | 2023.09.02 |
리눅스에서 C의 밀리초와 나노초의 정확도 차이를 어떻게 출력합니까? (0) | 2023.09.02 |
판다에서, 제자리에서 = 참이 해롭다고 생각합니까, 아니면 아닌가요? (0) | 2023.09.02 |
mysql5.5와 maria를 사용할 수 있습니까?동일한 시스템에 DB 10.0이 있습니까? (0) | 2023.09.02 |