programing

내부 조인 동일 테이블

javamemo 2023. 9. 2. 07:55
반응형

내부 조인 동일 테이블

저는 같은 테이블에서 몇 개의 행을 가져오려고 합니다.사용자 테이블입니다. 사용자가 가지고 있습니다.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

반응형