2016-06-14 2 views
0

나는 두 (2) 하나의 데이터베이스에서 테이블, 내가 지불하거나 지불되지 않은 모든 구성원 표시하려는 있습니다MySQL의 쿼리

을 ,

SELECT members.*, payments.amount='', paid_for='fee'; 

표 1 "회원"ID와, ROLL NO와 이름

표 2 ID ROLL NO, 금액, PAID_FOR, DATE와 "지불":이 있지만 작동하지 않는 시도 STA TUS는 영수증 NO

내가 원하는이 금액이 비어있는 경우 모두, 더 지불이 이루어지지 않으면 데이터베이스에있는 모든 구성원으로 지불하지 표시 의미 수수료

에 대해 지불을 선택합니다. 이 같은

+0

[JOIN] (http://dev.mysql.com/doc/refman/5.7/en/join.html)을 사용하여 보길 원할 수 있습니다. 너 뭐 해봤 니? – slapyo

+0

나는 이것을 시도하지만 SELECT 멤버는 작동하지 않는다. *, payments.amount = '', paid_for = 'fee'; – mrina

답변

0

뭔가 : 더 지불하지 모든 회원을 원하는 경우에

SELECT m.ID,m.ROLL_NO,m.NAMES,p.AMOUNT,p.PAID_FOR,p.DATE,p.STATUS,p.RECEIPT_NO 

     FROM MEMBERS m INNER JOIN PAYMENTS p 

       ON m.ROLL_NO = p.ROLL_NO 

     WHERE (m.AMOUNT IS NULL OR m.AMOUNT='') AND p.PAID_FOR='fee' 

     GROUP BY m.NAMES; 
+0

감사합니다. @ dmitryro 's하지만이 메시지와 혼동을 일으 킵니다. "회원들로부터의 기부금 지불"p는 무엇을 의미합니까? – mrina

+0

이것은 두 테이블의 데이터를 쿼리한다는 것을 의미하며 두 테이블의 교차 (ROLL_NO를 통해 관계가있는 테이블과 두 테이블에있는 데이터)를 필요로합니다. 두 테이블 중 JOIN을 사용할 때의 SQL 구문입니다. (또는 교차하는 데이터에 대해 내부 조인을 사용하는 두 개 이상의 테이블을 기반으로 데이터를 확인하고 하나의 테이블에만있는 데이터에 대해 외부 조인을 읽습니다. – dmitryro

0

, 당신은 사용 inner join을 필요로 할 수 있으며, 귀하의 요구 사항과 함께, 당신의 상태가 and을해야, 다음 시도)

select distinct t1.* 
from members t1 
inner join payments t2 
on t1.roll_no = t1.roll_no 
and t2.paid_for = 'fee' and (t2.amount is null or t2.amount = '') 

또는 같은 exists을 사용할 수

select t1.* 
from members t1 
where exists (
    select 1 
    from payments t2 
    where t1.roll_no = t2.roll_no 
    and t2.paid_for = 'fee' 
    and (t2.amount is null or t2.amount = '') 
)