2011-02-22 4 views
2

작은 거래 시스템을위한 3 개의 테이블이 있습니다. USERS, 같은 항목거래, 자신이 테이블 거래 (논리적으로 충분한)에서 개최 된 거래 :초급 멀티 참여 질문

column  type 
========== ===== 
seller_id int 
buyer_id int 
item_id int 
quantity int 
cost  int 
currency int 

내가 ID를 매핑 가입 3의 방법을 사용하여 거래를 보류 표시 할 USER 및 ITEM 테이블의 이름. 지금까지 내가 가지고있어 :

첫 번째 조인은 정상적으로 작동하지만 두 번째 결과를 전달하자마자 실패합니다. 0 데이터를 반환합니다. 나는 그것이 진짜 noobie 문제 (실제로 나는 그것을 고치기 쉽다 = good)를 기대하고있다. 그러나 나는 그것을 볼 수 없다. (아마 나는 이런 것들에 대한 멍청이이기 때문에).

+1

item_id가 items 테이블 내에 존재하지 않으면 작동하지 않는 유일한 이유가 있습니다. INNER JOINS를 사용하면이 ID를 가진 테이블에 항목이 하나 이상 있어야합니다. – CAbbott

+0

@ user628935 - 왼쪽 결합을 먼저 사용하고 올바른 데이터가 있는지 확인하십시오. 또한 xxx 값을 가진 buyer_id가 실제로 있습니까? – JonH

답변

4
SELECT 
     users.name AS seller, 
     items.id AS item_id, 
     items.name AS item, 
     trades.item_id AS trade_id, 
     trades.quantity AS quantity, 
     trades.cost AS cost, 
     trades.currency AS currency 
FROM 
     trades 
LEFT JOIN 
     users 
ON 
     trades.seller_id = users.id 
LEFT JOIN 
     items 
ON 
     trades.item_id = items.id 
WHERE trades.buyer_id = xxx 
+0

테이블에 데이터가 누락되어있는 경우를 대비하여 왼쪽 조인을 사용했지만 그보다 더 많은 데이터를 알고 있습니다. 그래서 당신이 아는 것을 사용하십시오. – JonH

+0

존 감사합니다, 그 자리에 있습니다. 저주, 나는 이것도 내 머리가 있다고 생각 했어. 이봐, 호, 교과서로 돌아가. 하지만 고마워. – user628935

+0

@ user628935 - 문제가 없으므로 답변을 수락하여 스레드가 기본적으로 닫히는 것을 잊지 마십시오. – JonH

1

나는 trades_id 나는 또한 당신이 일치하는 존재하지 않는 경우 오류를 트리거 할 경우에만 내부 조인 사용, 가입 LEFT 대신 INNER 조인을 사용하는 조언

을 trades.item_id해야합니다 생각합니다. LEFT JOIN을 사용하면 두 번째 테이블에 일치 항목이없는 경우에도 항상 데이터를 반환합니다. 참조 : http://www.w3schools.com/Sql/sql_join.asp

+0

당신은 전적으로 레이이고 나는 그 버그에 대해 사과합니다. 그러나 그것은 내가 알지 못했고 알아야 할 것을 열었습니다. 그래서 이기적으로 저에게는 유용합니다. 그리고 고마워. – user628935