2012-09-24 3 views
1

이것은 Android SQLite 용입니다.어떻게 두 개의 쿼리를 하나로 결합합니까?

select * from table where name='name'; 

select * from table where name!='name' order by name; 

나는이 두 쿼리를 결합하여 문장을 만들려면 :이 같은 두 개의 쿼리가 있습니다. 나는 모두 조합을 시도했지만 한 명령으로 명령을 수행 한 다음 결합 할 수는 없습니다. 나는 이것을 시도했다 :

select * from table where name='name' 
union all 
select * from table where name!='name' order by name; 

모든 것은 쿼리를 조합 한 다음 이름순으로 정렬하는 것이다. 나는 그것을 원하지 않는다. 나는 두 번째 성명서에서 먼저 주문을하고 나서 그들을 결합하고 싶다.

다르게 질문을 넣으려면, 여기 내 데이터입니다 :

Name 

a 
b 
c 
d 
e 
f 
g 
h 
i 
j 

하지만 출력이 원하는 :

Name 

g 
a 
b 
c 
d 
e 
f 
h 
i 
j 

내가 정상에 하나 개의 행을 얻으려면 다음 주문 행의 나머지. 어떤 도움을 주셔서 감사합니다.

답변

4

임시 테이블을 사용할 필요가 없으므로 정렬 할 추가 열을 추가해야합니다. 다음과 같은 것 :

select 1, * from table where name='name' 
union all 
select 2, * from table where name!='name' 
order by 1, name; 

지금 당장은 sqlite를 설치하지 않지만이 트릭이 작동해야합니다. (첫 번째 열에 별칭을 추가해야 할 수도 있음).

+0

오우 나는 비슷한 제안을 추가하기 위해 편집하고 있었지만 그렇게하는 것이 영리한 방법입니다 ... –

+0

답변 해 주셔서 감사합니다. 이것은 내가 한 일이며 작동하지 않습니다 : 리그 1 위를 선택하십시오. 리그 = '리그'및 이름 = '이름' 노동 조합 모두 리그 2 팀 중에서 리그 2를 선택하십시오. ! = 'name'order by 2, 이름 desc; 작동하지 않았습니다. –

+0

고마워, 방금 그걸 알아 냈어. –

1

테이블의 다른 속성이없는 한 How to combine two sql queries?에서와 같이 두 선택 사이에 조인을 허용하는 정렬을 제공하는 데 사용할 수없는 경우 맨 위로 이동해야하는 쿼리의 결과를 저장해야합니다. 임시 테이블에 저장 한 다음 정렬 된 결과를 저장하기 전에 해당 테이블에 추가하십시오.

나는 Android에서 임시 테이블을 사용한 적이 없으므로 예제를 제공 할 수 없지만 가능한 한 알고 있습니다.

두 가지 쿼리를 개별적으로 실행 한 다음 상황에 따라 코드 결과를 결합하는 것이 좋습니다.

1

그 작업은 (Order by없이 사람) 간단한 선택, 수행해야하기 때문에이 UNION 또는 UNION ALL 함께 할 수없는 SQLLite 문서에 따르면.

http://www.sqlite.org/lang_select.html

은 아마 내가 일반적으로 저 두 개의 쿼리를 단지을하고 자바의 결과를 결합하는지도하는, 모르는이 할 수있는 매우 영리한 방법이있다.

[편집] Jhovanny는 그것을하는 아주 영리한 방법이 있습니다.

1

지금은 그것을 테스트 할 수 있지만,이 같은 작업을해야합니다 :

select t.*, case when name = 'name' then 0 else 1 as o from table t order by o, name; 

는 그런 다음 두 개의 선택이나 조합이 없습니다. 안드로이드에서 sqlite의 case 문을 사용할 수 있다고 가정합니다.

관련 문제