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
'programing' 카테고리의 다른 글
특정 콩에 대해 스프링 자동 배선을 비활성화하는 방법? (0) | 2023.10.18 |
---|---|
활동 외부에서 활동 시작()을 호출하시겠습니까? (0) | 2023.10.18 |
SQL Server에서 오늘부터 최근 30일간의 레코드 가져오기 (0) | 2023.10.18 |
Oracle: SQL 또는 PL/SQL을 사용하여 파일 이름 확장명을 추출하는 가장 빠른 방법 (0) | 2023.10.18 |
Timber RSS 피드 이슈가 있는 사용자 지정 보관 페이지 (0) | 2023.10.18 |