두 개의 테이블이 있습니다.
--------------------------
USER
------------------
id | name | email
------------------
1 | w | w@g
------------------
2 | x | x@g
-----------------
3 | y | y@g
------------------
4 | z | z@g
------------------
FRIENDS
-----------------------
user | friend | status |
-----------------------
1 | 2 | friend
-----------------------
1 | 3 | requested
-----------------------
여기 FRIENDS 테이블에서 w 는 x 와 y의 친구입니다 .
내가 원하는 것 : 내 검색 쿼리에서 사용자 친구 상태를 포함한 모든 기록을 얻고 싶습니다.
Expected Results:
------------------------------
id | name | email | status |
------------------------------
2 | x | x@g | friend |
------------------------------
3 | y | y@g | requested |
------------------------------
4 | z | z@g | null |
------------------------------
내가 시도한 것
SELECT * FROm `user` AS A INNER JOIN friends AS B ON A.id = B.user WHERE A.firstName LIKE '%e%'
미리 감사드립니다.
먼저 사용자 데이터 (이름 등)를 표시하고 싶으므로 사용자에서 선택하십시오. 사용자 1과 관련된 친구 상태를 표시하고 싶으므로 적절하게 가입하세요. 사용자 1과 관련된 친구 상태를 가질 수 있지만 어쨌든 보여주고 싶기 때문에 내부 조인을 사용할 수 없지만 외부 조인이 필요합니다. 마지막으로 where 절의 결과에서 사용자 1을 제외합니다.
select u.*, f.status
from user u
left join friends f on f.friend = u.id and f.user = 1
where u.id <> 1
수정 (승인 후) : 특정 기준 (예 : '% e %'와 같은 이름)과 일치하는 모든 사용자를 원하는 경우 표시되는 데이터를 이해하기 위해 결과에 해당 사용자도 포함되어야합니다. 따라서 사용자 테이블을 두 번 쿼리해야합니다. 이를 위해 먼저 해당 기준과 일치하는 모든 사용자를 다른 모든 사용자 (예 : 다른 사용자 ID)와 결합한 다음 친구 관계에 참여했습니다.
select user_self.*, user_other.*, f.status
from user user_self
join user user_other on user_other.id <> user_self.id
left outer join friends f on and f.user = user_self.id and f.friend = user_other.id
where user_self.firstname like '%e%';
모든 관계를 가진 모든 사용자를 원하면 WHERE 절을 제거하십시오.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다