2009-06-15 3 views
0

주식 시장의 이벤트를 나타내는 두 개의 테이블 "분할"과 "배당금"이 있습니다.SQL에 참여 선언

스플릿 테이블에는 "day", "ratio"및 "ticker"가 있습니다. 배당 테이블에 "일", "금액"및 "시세"가 있습니다.

두 테이블의 정보가 있고 날짜와 시세로 정렬 된 결과로 된 조인 된 테이블을 얻고 싶습니다. 이 같은 뭔가 : (형식 미안) 내가 완전 외부를 보았다

splits.day splits.ratio splits.ticker dividends.day dividends.amount dividends.ticker 

1990-01-03  2   QQQQ   null   null   null 

null   null   null  1995-05-05  15.55   SPY 

2000-09-15  3    DIA   null   null   null 

null   null   null  2005-03-15  3    DIA 

은 (MySQL을 조합 사용) 위키 피 디아에 조인 그러나 나는이 일에 의해 정렬 할 얻는 방법을 알아낼 수 없었다. .. 어떤 도움이라도 대단히 감사 할 것입니다!

편집 : 여기에 분할 무엇의 예와 배당

splits.day splits.ratio splits.ticker 

1990-01-03  2   QQQQ 

2000-09-15  3    DIA 



dividends.day dividends.amount dividends.ticker 

1995-05-05  15.55   SPY 

2005-03-15  3.55    QQQQ 
+0

이 견인 테이블에는 어떤 것이 있습니까? –

+0

두 테이블 모두 날짜와 시세가 있지만 날짜는 모두 다를 가능성이 높으며 시세 표시가 두 테이블 또는 한 테이블 모두에있을 수 있습니다. – user122937

답변

1

확인, 편집을 기반으로, 그것은 나에게 보인다 . 당신은 아마 이것을하고 싶어합니다 :

select * 
from 
(
    select day, ticker, ratio, null as amount 
    from splits 

    union 

    select day, ticker, null as ratio, amount 
    from dividends 
) as q 
order by day, ticker 
+0

예! 이것은 내가 원하는 것입니다. 비록 당신의 게시물과 거의 같은 시간에 내 생각에 나왔습니다. 참조 , 여기 내 쿼리 : SELECT 일, 시세, 수와 비율, "1"조정 AS issplit 분할 UNION issplit로, "0"으로 조정 SELECT 일, 시세, 수와 양, FROM FROM 배당금 주문 시세, 일 – user122937

0

전체 외부 조인 할 위의 예에 포함되어

select splits.day splits.ratio splits.ticker dividends.day dividends.amount dividends.ticker from splits , dividends where splits.ticker = dividends.ticker order by splits.day 
0

나는 당신이 널 (null) 당신이 필요로 할 이유를 이해하지 못하는 예를 들어, 한 테이블의 모든 행에 다른 모든 "시세 표시기"가있는 것은 아닙니다. 심지어 두 표 사이의 관계를 "시세 표시"합니까?

select splits.*, dividends.* from splits left join dividends 
on (splits.ticker = dividends.ticker) 
order by splits.day, dividends.day, splits.ticker 

편집 : 모든 가정이 위의 올바른 경우

,이 같은 무언가 당신이 원하는 것을해야 의견을 바탕으로, 당신은 노동 조합

select a.ticker,a.ratio_or_amount,a.day,a.what from (
select ticker, day, ratio as ratio_or_amount, 'splits' as what from splits 
union 
select ticker, day, amount as ratio_or_amount, 'dividends' as what from dividends 
) a order by a.day 

을 찾고 수 있습니다 이것은 추한,하지만 난 정말 당신이 무엇에 실패하고 있습니다. relational theory에 대한 재충전을 놓친 것처럼 보입니다.

+0

이 쿼리의 결과는 내가 찾고있는 것이 아닙니다. 두 테이블은 실제로 직접 관련이 없습니다. 예를 들어, 분할 표에는 특정 시세 표시기가있는 세 개의 항목이 있고 시세 표가 배당 표에 있거나 부재 할 수 있습니다. – user122937

+0

그러면 NxN 결과와 두 행 사이에 모든 행이 결합 된 정확히 원하는 것은 무엇입니까? 연합? –

+0

분할 및 배당에서 나온 모든 정보를 날짜별로 정렬 된 하나의 테이블로 병합하고 싶습니다. 원본 테이블과 내가 원하는 결과를 모두 보여주기 위해 질문을 편집했습니다. – user122937

0

노동 조합을 사용할 필요가 없습니다. 당신은 (죄송합니다, 제가 테스트 MySQL을 사용할 수없는)이 작업을 수행 할 수 있어야한다 : 당신은 정말 전혀 참여하지 않으처럼

select 
    ifnull(splits.day, dividends.day) as day, splits.ratio, 
    ifnull(splits.ticker, dividends.ticker) as ticker, dividends.amount 
from splits 
    outer join dividends on 
     splits.day = dividends.day and splits.ticker = dividends.ticker 
order by day, ticker 
+0

SQL 오류가 발생합니다. – user122937

+0

것은 분할과 배당의 날짜와 시세가 동일하지 않습니다. 따라서 특정 날짜/시세 표시가있는 경우에는 오늘 날짜/시세 콤보가 배당금에 존재하지 않는다는 사실이 거의 확실합니다. – user122937