2014-10-30 2 views
0

난 그냥 올바른 구문을 확인할 수 없습니다 ..이 간단 확신의 가입/MySQL은 내가 두 테이블이 .. 다른 두 테이블

을 테이블 합성을 만들

mysql> select * from sellTable; 
+---------+------+-------------+ 
| Quarter | Year | sellerAgent | 
+---------+------+-------------+ 
|  2 | 2008 |   1 | 
|  3 | 2008 |   1 | 

내가 꿔 것입니다 :

mysql> select ????????????? 
+---------+------+-------------+-------------+ 
| Quarter | Year | sellerAgent | buyerAgent | 
+---------+------+-------------+-------------+ 
|  4 | 2007 |   0 |   1 | 
|  1 | 2008 |   0 |   2 | 
|  2 | 2008 |   1 |   1 | 
|  3 | 2008 |   1 |   0 | 

0은 0이 될 수 있습니다. 신경 쓰지 마십시오. 이것은 너무 어려워서는 안되는 것처럼 보이지만, 내가 원하는 것을하기 위해 mysql을 강요하지는 않았다.

업데이트 : 완전 외부를 사용하려면 선택이 조인 왼쪽을 위해 주어졌다 .. 두 제안 및 제안을 사용

내가 다음과 함께했다 .. 가입 할 수 있습니다. 필자의 경우, buyTable과 sellTable은 mysql 임시 테이블이었다. 같은 쿼리에 대해 테이블을 다시 열 수없는 임시 테이블을 mysql에서 사용하는 데 조건이있다. 그래서, 나는 동일한 내용을 가지고있는 구매와 판매 모두를위한 두 번째 임시 테이블을 만들어야했습니다. 나는 그들에게 buyTable2와 sellTable2를 불렀다. 실제 mysql 테이블을 사용하고 있다면 그렇게 할 필요가 없으며 다음 쿼리를 적절하게 수정할 수 있습니다.

또한이 쿼리는 구매 및 판매 열을 요약 한 세 번째 열을 추가합니다. 또한 NULL 입력을 대체하여 주어진 분기에 대해 Zero가없는 구매 (또는 판매)가 없었습니다. 나는이 트릭을 할해야한다고 생각

(select buyTable.Quarter, buyTable.Year, ifnull(sellerAgent,0), ifnull(buyerAgent,0), 
     ifnull(sellerAgent,0)+ifnull(buyerAgent,0) 
    FROM buyTable 
    LEFT JOIN sellTable ON 
    (buyTable.quarter = sellTable.quarter AND buyTable.year = sellTable.year)) 
union 
(select sellTable2.Quarter, sellTable2.Year, ifnull(sellerAgent,0), ifnull(buyerAgent,0), 
     ifnull(sellerAgent,0)+ifnull(buyerAgent,0) 
    FROM buyTable2 
    RIGHT JOIN sellTable2 ON 
    (buyTable2.quarter = sellTable2.quarter AND buyTable2.year = sellTable2.year)); 

답변

2

,

select buytable.quarter, buytable.year, sellerAgent, buyerAgent FROM buyTable LEFT JOIN sellTable ON (buyTable.quarter = sellTable.quarter AND buyTable.year = sellTable.year) 
UNION 
select sellTable.quarter, sellTable.year, sellerAgent, buyerAgent FROM buyTable RIGHT JOIN sellTable ON (buyTable.quarter = sellTable.quarter AND buyTable.year = sellTable.year) 

사용 UNION 중복 항목 중복 항목을 원하는 모든 경우에 사용 UNION을하지 않으려면.

+0

이것은 작동합니다! 그것은 0으로 NULL을 가지고 있지만, 내가 말했듯이, 나는 그것으로 완전히 괜찮습니다. – Kirby

+0

여기 좀 더 .. select buyTable.Quarter, buyTable.Year, ifnull (sellerAgent, 0), ifnull (buyerAgent, 0), ifnull (sellerAgent, 0) + ifnull (buyerAgent, 0) buyTable LEFT JOIN sellTable ON buyTable.quarter = sellTable.quarter 및 buyTable.year = sellTable.year); 사실 null 값을 0으로 대체 할 것입니다 (그리고 둘을 합한 다른 열을 추가합니다. 나중에 어떤 점에서 누군가에게 유용 할 수 있습니다). – Kirby

+0

사실,이 대답이 제대로 작동하지 않는다는 것을 발견했습니다. 참여가 남아 있으면 전체 buyTable을 가져 와서 sellTable의 항목을 추가합니다 ... 그러나 판매 항목이 있지만 구매 항목이없는 행은 없습니다. 이 경우에는 3/2008 행이 답안의 일부로 포함되지 않습니다. – Kirby

0
select quarter, year, sellerAgent, buyerAgent 
from buyTable full outer join sellTable 
using(year,quarter); 
+1

mysql에 외부 결합이 없다고 생각합니다 !!! 오라클에서 작동하는 –

+0

. 나는 그 질문을 올바르게 읽어야했다. – saikumarm

+0

이 질문에 대한 답을 제공하지 않습니다. 비평하거나 저자의 설명을 요청하려면 게시물 아래에 의견을 남기십시오. 자신의 게시물에 언제나 댓글을 달 수 있으며 충분한 [평판] (http://stackoverflow.com/help/whats-reputation)을 갖게되면 [모든 게시물에 댓글을 달 수] 있어야합니다 (http://stackoverflow.com/help/privileges/comment). – Jubobs