2009-09-01 6 views
0

서로 다른 이벤트 유형의 세부 정보를 저장하는 두 개의 테이블이 있습니다. 테이블은 date, duration 등과 같은 필드와 거의 동일합니다. 두 테이블에 대한 조인을 수행하고 'date'상호 필드로 정렬하려고합니다.SQL 두 개의 유사한 테이블 조인하기

'유형'필드를 단일 테이블에 추가하고 한 곳에서 모두 저장하는 것이 더 간단 할 것입니다. 불행히도 사용하고있는 CMS의 특성상 허용되지 않습니다.

간단하게 수행 할 수있는 방법이 있습니까? 다음 쿼리는 결과를 반환하지 않습니다.

$sql = "SELECT * FROM Events_One a, Events_Two b WHERE a.Date > now() OR b.Date > now() ORDER BY Date ASC LIMIT ".$limit;

답변

3

당신은 UNION 문에 보일 것입니다. 그것은 당신이 필요로하는 것을 정확히합니다.

SELECT columns FROM t1 
UNION 
SELECT columns FROM t2 

하나의 세트가 제공되며 나중에 원하는대로 필터링하거나 정렬 할 수 있습니다.

1

각 이벤트 유형별로 테이블이있는 경우 이 각각 동일한 개의 필드로 구성되어 있다면 디자인을 재고해야한다고 말하고 싶습니다. 정규화 규칙을 위반하고 있습니다. 새로운 이벤트가 발생할 때마다 다른 테이블을 추가해야하기 때문에 가난한 디자인입니다. 새로운 유형 값과 같은 데이터를 기존 테이블에 추가하여 새 이벤트를 추가 할 수 있다면 더 좋습니다. 당신이 두 개의 유사한 테이블을 조인하려면

+1

그는 분명히 자신의 문제에서이 해결책이 허용되지 않는다고 말했습니다. – samuil

+0

예, 불행히도 내 디자인이 아닙니다.) – Dan

0

당신은 조합 또는 조합의 모든

연합 (EU)을 사용할 수 있습니다하십시오 노동 조합을 사용하여 Command.When 가입과 마찬가지로 그 선택된 모든 열이 같은 datatype.Only 고유 한 값으로 할 필요가 가 선택됩니다.

유니언 전체 : 유니언과 거의 같습니다. 별개의 작업이 없으므로 모든 값을 취합니다.

select * FROM Events_One a WHERE a.Date > now() 
union 
select * FROM Events_Two b WHERE b.Date > now() 
관련 문제