1
두 개의 테이블에 두 개의 서로 다른 종류의 엔티티가 있습니다.이 엔티티 중 몇 개만 공통 열로 결합하고 공통 열 중 하나로 정렬하려고합니다. 결과 테이블에서 각 행은 한 테이블의 행이나 다른 테이블의 행을 나타내야합니다. 이 같은 예를 들어, 용 테이블 :테이블을 조인하여 소스 테이블의 각 행에 대해 하나의 행을 얻는 방법은 무엇입니까?
CREATE TABLE apple (
apple_id INT NOT NULL AUTO_INCREMENT,
acquired DATETIME NOT NULL,
is_fresh TINYINT,
PRIMARY KEY (apple_id)
);
'1', '2012-07-27 19:06:58', '1'
'2', '2012-07-28 18:05:43', '0'
CREATE TABLE orange (
orange_id INT NOT NULL AUTO_INCREMENT,
acquired DATETIME NOT NULL,
is_yummy TINYINT,
PRIMARY KEY (orange_id)
);
'1', '2012-06-12 10:03:31', '0'
'2', '2012-08-30 22:00:02', '1'
같은 것 그들을 합류에 대한 쿼리의 내 생각 :
- :
내가이 쿼리에 몇 가지 문제를 참조SELECT IF(orange_id IS NULL, 'apple', 'orange') AS type, IF(orange_id IS NULL, apple.acquired, orange.acquired) AS acquired, is_fresh, is_yummy FROM apple CROSS JOIN orange ON apple_id IS NULL OR orange_id IS NULL ORDER BY acquired ASC 'orange', '2012-06-12 10:03:31', NULL, '0' 'apple', '2012-07-27 19:06:58', '1', NULL 'apple', '2012-07-28 18:05:43', '0', NULL 'orange', '2012-08-30 22:00:02', NULL, '1'
CROSS JOIN
의 작동 방식을 이해하면 쿼리가 매우 느려질 수 있습니다. 가능한 모든 사과 오렌지 조합을 통과 할 수 있습니까? 그렇지 않습니다. 더 빠른 방법이 있습니까? IF(...)
기능이보기 흉하게 들립니다. 그들은 정말로 필요합니까?
고마워, 그건 정확히 내가'JOIN's로 발명하려고 시도했던 바퀴의 종류이다. :) – Septagram