2010-04-05 2 views
0

이것은 내 다른 질문에 관련 : 내가 일치와 비 일치의 테이블에 가입하려고 Managing Foreign KeysMySQL의 - 가입 일치 및 비 일치는

.

그래서 관심 분야 목록, 사용자 목록 및 사용자 관심 분야 목록이 있습니다.

사용자가 관심이 있는지 여부에 관계없이 쿼리가 모든 관심사를 반환하도록하려는 경우 (이 경우 null이어야 함), 사용자 = x 인 경우에만 가능합니다. 매 쿼리마다 사용자가 가지고있는 유일한 관심사가 모든 관심사 대신 작동하도록 할 때마다 모든 관심사가 있는지 여부가 결정됩니다.

답변

0
SELECT * 
FROM interests i 
LEFT JOIN userinterests ui ON i.interestID = ui.interestID 
LEFT JOIN users u ON ui.userID = u.uiserID 
and u.userID = ? 

내부에 가입하면 주요 tbale하기 Inteh 레코드가 있어야하지 않는다 테이블에 WHERE 조건을 두는 경우에, 당신은이 왼쪽에서 가입 변환 가입 할 수 있습니다. (예 : u.userid가 null 인 경우)

Of가 일치하지 않는 레코드를 검색 할 때 왼쪽 조인의 오른쪽 부분이 무언가를위한 확실한 조건을 가질 수있는 유일한 시간입니다. 물론 선택할 필드를 정의하고 select *를 프로덕션 코드에서 사용하면 안됩니다. 특히 네트워크를 통해 반복되는 정보를 전송할 때 조인 할 때가 아닙니다 (데이터가 결합되면 feild가 반복됨) 리소스 낭비와 프로그래밍 불량입니다 여러 가지 이유로 연습하십시오.

+0

ON user_interests UI를 가입 select *는 예제를위한 것일뿐입니다. 확실히 사용하지 않을 것입니다. 그러나 이것이 내 질문에 어떻게 대답하는지 잘 모르겠습니다. 나는 행과 행이 일치하지 않는 행을 모두 필요로하기 때문에 이것이 내가 노동 조합 만 할 수있을 것이라고 생각합니다. – jwzk

+0

이렇게하면 일치하거나 일치하지 않는 행이 표시됩니다. 이것이 바로 왼쪽 조인의 모습입니다. 그것은 INeterests에서 모든 기록을 줄 것이고 만약에 관심사에 붙어있는 사용자가 있다면 그것도 보여줄 것입니다. – HLGEM

+0

완벽한! 죄송합니다. 코드가 같아 보이는 것처럼 WHERE 대신 AND를 놓친 것 같습니다. 감사. – jwzk

2

당신은 오히려 위치를 위해 사용자 ID 찾고있다 LEFT JOINS

뭔가

SELECT * 
FROM interests i LEFT JOIN 
     userinterests ui ON i.interestID = ui.interestID LEFT JOIN 
     users u ON ui.userID = u.uiserID 
WHERE userID = ? 

같이 사용해야합니다.

+0

MySQL의 LEFT JOIN은 LEFT OUTER JOIN의 약자입니다. –

+0

나는 그 어떤 이유로 든 작동하지 않습니다. 나는 이것이 효과가 있다는 것을 알았다.. 그러나 아마 그 최고. SELECT *이 관심 FROM LEFT는 ON user_interests UI를 가입 ui.interest_id = interests.interest_id WHERE USER_ID 관심 FROM = '1' UNION SELECT * LEFT 내가 생각 ui.interest_id = interests.interest_id – jwzk