테이블 T1이 있고 두 번 행이있는 새 테이블을 가져 오려고합니다. T1 (T1의 복사본 하나)과 T1 (T1의 두 번째 복사본)에 대한 1을 얻는 추가 열입니다.(0,1)^T로 테이블을 교차 결합하는 좋은 방법은?
즉, 하나의 부울 열 및 가능한 모든 값이있는 상수 테이블과 T1을 교차 조인하려고합니다.
MySQL에서이 작업을 수행하는 가장 효과적이고 가장 효율적인 방법은 무엇입니까?
테이블 T1이 있고 두 번 행이있는 새 테이블을 가져 오려고합니다. T1 (T1의 복사본 하나)과 T1 (T1의 두 번째 복사본)에 대한 1을 얻는 추가 열입니다.(0,1)^T로 테이블을 교차 결합하는 좋은 방법은?
즉, 하나의 부울 열 및 가능한 모든 값이있는 상수 테이블과 T1을 교차 조인하려고합니다.
MySQL에서이 작업을 수행하는 가장 효과적이고 가장 효율적인 방법은 무엇입니까?
, 당신은이 작업을 수행 할 수 있습니다 : 이것은 확실히 UNION보다 효율적입니다
select t.*, const.which
from t cross join
(select 0 as which union all select 1 as which) const
. UNION ALL보다 더 효율적인지 여부는 데이터베이스 엔진에 따라 다릅니다.
"t"가 하위 쿼리 인 경우 하위 쿼리가 두 번 이상 평가 될 가능성이 없으므로이 방법이 더 효율적일 수 있습니다.
당신은 노동 조합을 의미합니까? 당신이 십자가에 가입이 작업을 수행하려면
select 0 as newfield, * from yourtable
union all
select 1, * from yourtable
암시 적으로 '1'의 'as newfield'입니까? 그리고 어쨌든 그것을 포함시켜야합니까? –
공용체는 첫 번째 선택에서 필드 이름을 가져옵니다. 아무런 차이가 없습니다. – podiluska
이것은 좋은 대답입니다. 그러나 UNION ALL을 사용하는 것이 더 좋으므로 복제본을 제거하려고 노력하는 낭비가 없습니다. –
[MySQL의'cross join' ='inner join'에서 쉼표 구문을 사용해야 할 수도 있습니다.] (http://dev.mysql.com/doc/refman/5.6/en/join .html) –
@MartinSmith. . . 크로스 조인 = 내부 조인이 맞습니다. 그러나 보간이 잘못되었습니다. 위 쿼리의 "크로스 조인"을 "내부 조인"으로 대체 할 수 있으며 on 절없이 작동합니다. mysql 조인 (http://dev.mysql.com/doc/refman/5.0/en/join.html) 문서를 신중하게 구문 분석하면 "on"절이 선택 사항임을 알 수 있습니다. –
방금 그 점을 발견했습니다. MySQL의 동작은 내가 생각한 것만 큼 이상하지 않습니다. –