2012-05-11 4 views
1

mysql을 사용하는 조건을 기반으로 테이블 사이에 레코드를 가져 오려고합니다. 이게 내 테이블이야. 테이블 이름 : trans_table 및 두 개의 필드가 있습니다.테이블에서 필요한 레코드를 가져 오는 방법은 무엇입니까?

item transaction 
----- ----------- 
item1 b 
item2 b 
item3 b 
item3 c 
item4 d 
item5 b 

트랜잭션 b 만있는 항목을 얻으려고합니다. 결과에 다른 트랜잭션이 들어 있지 않습니다.

I는 다음 검색어

1.`select * from trans_tbl where transaction = 'b'` 

2.`select item,qty from trans_tbl where item in(select item from trans_table group by item having count(item)=1);` 

와 함께 시도 (항목 3은 C doesnot 트랜잭션 B를 포함 item4 B 및 항목 (4)와 함께 거래를 갖는 becoz) 필요한 출력이

item transaction 
----- ----------- 
item1 b 
item2 b 
item5 b 

같은 것 위의 두 가지 쿼리를 통해 필자는 필요한 출력을 얻을 수 없습니다. 다른 방법으로 이것을 얻을 수 있습니까?

+0

쿼리를 실행하면 어떻게됩니까? 전혀 아무것도 얻지 못하니? 모든 기록들? 오류 메시지? PHP를 통해 또는 데이터베이스와 직접 쿼리를 실행하고 있습니까? – andrewsi

+0

첫 번째 쿼리가 작동해야합니다. 테이블의 정의는 무엇입니까? 특히 거래 유형은 무엇입니까? –

+0

@GordonLinoff 그는 item3을 전혀 원하지 않기 때문에 작동하지 않을 것이고 그의 첫 번째 질의는 item3을 가져올 것입니다. – taylonr

답변

0

다음과 같이 시도해보십시오. 그것은 함께 그룹 모든 항목을 의지하고 해당 트랜잭션이 'B'

select item, transaction 
from trans_tbl 
where transaction = 'b' 
group by item, transaction 
having count(item) = 1 
0

또 다른 솔루션입니다 1. 단일 거래를하고 2 항목을 반환 :

select distinct t1.item, t1.transaction 
from trans_tbl t1 
left join trans_tbl t2 on t1.name=t2.name and t1.transaction<>t2.transaction 
where t2.name is null 

이 왼쪽에 가입하고 오른쪽 부분을 확인 왜냐하면 null이 트릭을 할 것입니다.

관련 문제