2010-12-16 5 views
-1

고려 다음 표 : 내가 원하는 그러나 경우, IDNUM 일치를 기반으로 합류 할 것같은 필드에서 조건이 다른 MySQL에 테이블 조인 하시겠습니까?

SELECT account.Name FROM account, records WHERE records.IDNum = account.IDNum 

이름 필드 위의 쿼리에서 :

account => ID, Login, Pass, Email, Level, IDNum, Name 
records => RID, Status, IDNum, Reason, Type, Amount, Date, SubmitterID 

지금 나는 다음과 같은 쿼리 테이블을 조인 이름 필드 WHERE account.ID = records.ID과 동시에 WHERE records.IDNum = account.IDNum을 얻으려면 가능합니까?

SELECT account.Name FROM account, records WHERE records.IDNum = account.IDNum 
SELECT account.Name FROM account, records WHERE records.SubmitterID = account.ID 

아마 아래 예제 데이터를 확인하시기 바랍니다 충분히 명확하지 않다 :

alt text

을 그러니 확실히 짧은, 하나에 아래의 두 쿼리에 가입

질문 첫 번째 쿼리의 Name 필드는 John을 반환하고 두 번째 쿼리의 Chris를 반환합니다. 한 쿼리에 이름을 표시하고 싶습니다.

+0

MySQL 버전에는 어떤 것이 있습니까? 내 '5.0'은 그런 '가입'을 시도하면 나에게 불신을하고 있습니다. – Bobby

+0

@Bobby : 죄송합니다. 내 검색어를 수정했습니다. MySQL 5.0.91 있습니다. – user435216

답변

1

당신은 실제로 매주 행을 joinging됩니다 다음 원하는 단지 하나의 유지에 필터링. 대신 바로 참여로를 필터링해야합니다

select account.Name 
FROM account 
    INNER JOIN records ON (records.IDNum = account.IDNum AND records.SubmitterID = account.ID)

편집 : OP 질문 편집에 의해

는 당신이 필요로하는 것 같습니다 및 위 JOINOR 대신 AND. 따라서 :

select account.Name 
FROM account 
    INNER JOIN records ON (records.IDNum = account.IDNum OR records.SubmitterID = account.ID)

편집 2 : 후속

create table account (id int, IDNum int, Name char(5)); 
insert into account values (1, 12345, 'John'), (2, NULL, 'Chris'); 
create table records (RID int, IDNum int, SubmitterID int); 
insert into records values (1, 12345, 2); 
select account.Name 
FROM account 
    INNER JOIN records ON (records.IDNum = account.IDNum OR records.SubmitterID = account.ID); 

수익률 (MySQL은 5.1.46로) OP에 의해 코멘트 :

+-------+ 
| Name | 
+-------+ 
| John | 
| Chris | 
+-------+

편집 3 : OP에 의해 두 번째 댓글 :

다음과 같은 것이 있습니까?

select account.Name as byIDNum, NULL bySubmitterID 
from account 
    inner join records USING (IDNum) 
union 
select NULL, account.Name 
from account 
    inner join records ON (records.SubmitterID = account.ID);
+0

편집 해 주셔서 감사합니다. 그러나 이것은'records.IDNum = account.IDNum' 또는'records.SubmitterID = account.ID' 여부와 상관없이 Name 필드에 대해 하나의 (단일) 값만 반환합니다. 이름 필드를 동시에 사용해야합니다.이게 정말 이상해 보입니까? – user435216

+0

@ user435216 : 죄송합니다. 제 MySQL 버전에서 동일한 결과를 얻지 못했습니다. – Danosaure

+0

감사합니다. 정말로 도움을 주셨습니다. 첫 번째 및 두 번째 필터의 결과를 두 개의 다른 열에 저장할 수 있습니까? 별칭을 만드는 것. 그리고 가난한 영어에 대해 정말 유감스럽게 생각합니다. 처음에는 질문을 명확하게 설명 할 수 없었습니다. – user435216

0

내가 오해했을 수도 있지만 간단하지 않고 필요한 것을 성취하지 못했을 수 있습니까?

SELECT account.name 
FROM account, records 
WHERE records.IDNum = account.IDNum 
AND records.SubmitterID = account.id 

또는 당신은이 규칙 중 하나에 해당 복귀 얻고 싶었다 경우 :

SELECT account.name 
FROM account, records 
WHERE records.IDNum = account.IDNum 
OR records.SubmitterID = account.id 
+0

내 질문에 충분히 명확하지 않은 것에 대해 대단히 죄송합니다. 업데이트 된 질문을 확인하십시오. 감사. – user435216