2016-11-06 3 views
2

두 테이블이 있습니다 : ordersoldorders. 둘 다 같은 방식으로 구성됩니다. 이 두 테이블을 결합한 다음 다른 테이블에 결합하려고합니다 : users. 이전에 나는 ordersusers을 가지고 있었고, oldorders을 현재 코드에 구h 주려고합니다.두 테이블의 결합에 테이블 조인?

SELECT u.username, COUNT(user) AS cnt 
    FROM orders o 
     LEFT JOIN users u 
     ON u.userident = o.user 
    WHERE shipped = 1 
    AND total != 0 
    GROUP BY user 

이 모든 사용자가 테이블 orders에서 만든 제로가 아닌 전체 주문의 수를 발견,하지만 난 ordersoldorders의 결합이 원하는. 이것을 어떻게 할 수 있습니까? 이것에 대한

create table orders (
    user int, 
    shipped int, 
    total decimal(4,2) 
); 
insert into orders values 
    (5, 1, 28.21), 
    (5, 1, 24.12), 
    (5, 1, 19.99), 
    (5, 1, 59.22); 
create table users (
    username varchar(100), 
    userident int 
); 
insert into users values 
    ("Bob", 5); 

출력은 다음과 같습니다

create table oldorders (
    user int, 
    shipped int, 
    total decimal(4,2) 
); 
insert into oldorders values 
    (5, 1, 62.94), 
    (5, 1, 53.21); 

두 테이블의 조합에서 실행 예상 출력은 다음과 같습니다 :

+----------+-----+ 
| username | cnt | 
+----------+-----+ 
| Bob | 6 | 
+----------+-----+ 

+----------+-----+ 
| username | cnt | 
+----------+-----+ 
| Bob | 4 | 
+----------+-----+ 

oldorders 테이블을 생성 한 후

주스 거기에 노조를 구h주게하는 방법이나 방법을 모릅니다. orders에서 쿼리를 실행하는 대신 orders union oldorders에 있어야합니다. 두 테이블 사이에 교차가 없다고 가정 할 수 있습니다.

SELECT u.username, COUNT(user) AS cnt 
FROM 
(
    SELECT * FROM orders 
    UNION 
    SELECT * FROM oldorders 
) o 
LEFT JOIN users u ON u.userident = o.user 
WHERE shipped = 1 
AND total != 0 
GROUP BY user; 

먼저 UNION 테이블 orders 사이 oldorders를 사용하여 결합 된 주문을받을 :

답변

4

당신은 union이 방법이 필요합니다.

나머지 작업은 사용자가 수행 한 작업과 완전히 동일합니다.


SEE DEMO


참고 :

Left join이 경우에는 이해가되지 않습니다. 사용자가 존재하지 않는 주문은 NULL 0을 출력으로 가져옵니다. 이것은 어떤 가치도 가지고 있지 않습니다.

당신은 소문자 "오"가 바로 괄호 후, 나를 위해 차이를 만들 듯 당신이 LEFT JOIN

+0

의 순서를 변경해야 다음 아직 주문한하지 않을 수 있습니다 사용자를 포함한 모든 사용자에 대해 <user,total orders>합니다 , 비록 그것에 어떤 문서를 찾을 수 없습니다. – kiwicomb123