2013-10-05 3 views
0

세 개의 'users', 'friends', 'friendsrequests'테이블이 있습니다.여러 테이블 선택 MySQL

'사용자'는 ID, 성 및 이름을 포함하고 'friends'및 'friendsrequests'는 모두 users_id_a 및 users_id_b를 포함합니다.

새 친구를 검색 할 때 firstname이 LIKE 인 ID를 선택합니다. whatever 또는 lastname LIKE : 무엇이든간에. 그러나 다른 두 테이블에있는 ID를 제외하고 싶습니다.

나는 애플리케이션 로직을 통해 이것을 해결하는 방법을 알고 있지만, 나는 이것을해서는 안된다. SELECT 문을 연결하면 안되며 조인을 사용해야한다는 것을 알고 있습니다.

답변

2

joins을 사용할 수 있다는 점에서 자신의 질문에 답변했습니다. MySQL에서 조인하는 방법에 대한 예제가 많이 있습니다.

여러 조인 유형이 있지만이 경우에 필요한 조인 유형은 아마도 LEFT OUTER입니다. 그런 다음 IS NULL을 사용하여 다른 두 테이블의 필드에서 필터링을 수행 할 수 있습니다. 그래서이 작업은 테이블에 데이터가 있는지에 관계없이 추가 테이블에 합류하는 것입니다. WHERE IS NULL을 사용하여 존재하는 것을 필터링합니다.

조인을 사용하는 대신 WHERE NOT EXISTS 접근 방식을 사용할 수 있습니다. 이 논리는 SQL 조인에 익숙하지 않은 사용자 일수록 길어질 수 있습니다. 예는 다음과 같을 수 있습니다

SELECT * FROM FRIENDS f 
WHERE NOT EXISTS (SELECT 1 FROM friendsrequests fr WHERE f.user_id = fr.user_id) 

몇 가지 예는 여기에서 찾을 수 있습니다 : 당신이 있다면 는 SELECT * WHERE NOT EXISTS

IN 문 또는 특별히 WHERE NOT IN (SELECT ...)

를 사용하는 또 다른 방법은 희망이 당신을 안내 할 것입니다 여전히 http://sqlfiddle.com/과 같은 사이트에서 정확한 SQL 스키마와 요구 사항을 게시하지 않으면 더 구체적인 응답을 얻을 수 있습니다.

+0

나는 데이터베이스의 전문가는 아니지만 어딘가에 SELECT ...를 사용하여 읽을 수 있습니다. 큰 테이블에서는 매우 느릴 수 있으므로, IN (SELECT ...)은 사용하지 않는 것이 좋습니다. 사실입니까? –

+0

나는 그것이 "매우 느리다"라고 말할 것입니다. 쿼리 및 테이블 크기에 따라 다릅니다. 대부분의 쿼리에 대한 실제 시스템에서는 성능 차이를 느끼기가 어렵습니다. 그냥 알고 있어야합니다. 이 세 가지를 비교 한 좋은 기사가 있습니다. http://explainextended.com/2009/09/18/not-in-vs-not-exists-vs-left-join-is-null-mysql/ 이유는 다른 유형을 언급하는 것이 더 명확하게 이해할 수 있다는 것입니다. 의도를 문의하십시오. – DaveHogan