1
내가 반대 해결책을 찾고 있는데 this question. tableB를 tableB로 self-join하려고하는데, where 절은 tableB 결과에 영향을 미치지 않습니다. cancel_date = '0000-00-00'을 사용하여 모든 고객과 고객의 합계를 계산하고 싶습니다. 테이블 tableA와 tableB의 위치를 전환하고 싶지 않습니다. 나는 다른 where
과 select
진술을 기반으로 tableA.MySQL자가 제외와 함께 어디
SELECT
count(tableA.client_id) as c_total,
count(tableB.client_id) as all_c_total
FROM (tableA) LEFT JOIN tableA tableB ON tableA.client_id = tableB.client_id
WHERE tableA.`cancel_date` = '0000-00-00'
GROUP BY month(tableA.purch_date)
ORDER BY month(tableA.purch_date)
결과이 같은 모습은해야
---------------------
c_total | all_c_total
---------------------
251 | 273
45 | 65
12 | 15
23 | 29
내 select 및 where 문은 tableA를 기반으로하므로 tableB (all_c_total)의 한 추가 열로 인해 부적절한 스위치 테이블이 아래로 뒤집어 질 것이라고 생각했습니다. 그리고 당신의 대답은 작동하지 않았다. (cancel_date는 여전히 두 테이블 모두에 영향을 미친다.) – castt
@castt Hmmm ... 별표 두 테이블에 대한 내 대답을 업데이트했다.'cancel_date'는't2'에 대한 결과를 제한해서는 안된다. if 업데이트 된 쿼리는 예상 결과를 제공하지 않으며, 다른 문제가있을 수 있습니다. 제공 한 예상 결과와 함께 이동하기 위해 샘플 데이터를 게시하는 것이 좋습니다. –
@castt'tableA t1'의'where' 절에 조건이 없어야합니다. 그러면 '외부 조인'이 '내부 조인'으로 바뀝니다. 지금까지 'from' 절에서 테이블을 정렬하는 것과 같이, 어떤 테이블이'select' 문에서 가장 많은 열을 가지고 있는지를 결정할 필요가 없다고 생각합니다 ... 대신 주문은 어떤 것을 기반으로해야한다고 생각합니다 일종의 논리적 인 진행, 필요한 레코드 ('t2')로 시작하여 선택적 레코드 ('t1')로 진행합니다. –