programing

MySQL 왼쪽 조인 다중 조건

muds 2023. 10. 18. 23:05
반응형

MySQL 왼쪽 조인 다중 조건

테이블이 두 개 있습니다.A와 B는 "group_id"로 연결되어 있습니다.
사용 중인 변수 2개:$keyword, $_SESSION['user_id']

A
group_id
키워드

B
이드
group_id
user_id

키워드 검색을 기반으로 이 사용자가 없는 모든 그룹을 선택할 수 있기를 원합니다.

따라서 목표는 user_id가 있는 A의 모든 행을 선택하는 것입니다!= {$_SESSBAND에 있는 해당 group_id에 대한 ION['user_id'}이(가) 키워드를 좋아합니다.

이것이 제가 시도한 것입니다.

SELECT a.* 
FROM a 
LEFT JOIN b ON a.group_id=b.group_id 
WHERE a.keyword LIKE '%".$keyword."%' 
AND b.user_id!=$_SESSION{['user_id']} 
GROUP BY group_id

그러나 제거하지 않으면 행(일치)을 찾을 수 없습니다.AND b.user_id!=$_SESSION{['user_id']}이 경우 사용자가 이미 속한 그룹도 포함됩니다. 제가 원하는 것은 아닙니다.

어떤 도움이라도 주시면 감사하겠습니다!감사해요.

추가 조건을 JOIN ON 조건으로 이동하면 결과를 반환하는 데 b가 필요하지 않습니다.

SELECT a.* FROM a 
    LEFT JOIN b ON a.group_id=b.group_id AND b.user_id!=$_SESSION{['user_id']} 
    WHERE a.keyword LIKE '%".$keyword."%' 
    GROUP BY group_id

정답은 간단히 다음과 같습니다.

SELECT a.group_id
FROM a 
LEFT JOIN b ON a.group_id=b.group_id  and b.user_id = 4
where b.user_id is null
  and a.keyword like '%keyword%'

확인중입니다.user_id = 4(세션의 사용자 ID).가입 기준에 포함되어 있으므로, 기준과 일치하지 않는 테이블 b의 행, 즉 해당 user_id가 없는 그룹에 대해 null 값을 반환합니다.

여기서부터는 null 값을 필터링하기만 하면 되고, 사용자가 없는 모든 그룹이 생성됩니다.

데모 여기

위의 답변이 맞습니다.이를 달성하기 위한 또 다른 방법은;

SELECT a.group_id
FROM a 
LEFT JOIN b ON (a.group_id, b.user_id) = (b.group_id, 4)
where b.user_id is null
  and a.keyword like '%keyword%'

완성 예제

SELECT * FROM a WHERE a.group_id IN 
(SELECT group_id FROM b WHERE b.user_id!=$_SESSION{'[user_id']} AND b.group_id = a.group_id)
WHERE a.keyword LIKE '%".$keyword."%';

언급URL : https://stackoverflow.com/questions/16637929/mysql-left-join-multiple-conditions

반응형