2013-12-10 4 views
0

내가 여기 해결책이있을 수 있습니다 생각에 가입 - 그것은 기본적으로 내가 (I 희망) 아래에 게시 다르게보다 내 질문에 접근하는 것장고는 동일한 열 다른 결과가

Django query where in

.

SELECT a.jobmst_name AS Parent, b.jobmst_name as Job from jobmst a 
    inner join jobmst b on b.jobmst_prntid = a.jobmst_id 
    WHERE (a.jobmst_name = 'Dept' and a.jobmst_prntid IS NULL) OR b.jobmst_prntname LIKE '\Dept\%' AND b.jobmst_dirty <> 'X' 
UNION 
SELECT jobmst_prntname as Parent, jobmst_name as Job FROM jobmst 
    WHERE (jobmst_name = 'Dept' AND jobmst_prntid IS NULL) 

다음과 같이 목록을 반환합니다 - -

Parent       Job 
NULL       Dept 
01. Dept_sub01     01.01 Trade Recon 
02. Dept_sub02     02.04 Dept_sub02.04 
02.04 Dept_sub02.04   02.04.02 Dept_sub02.04 
02.04 Dept_sub02.04   02.04.04 Dept_sub02.04 
02.04 Dept_sub02.04   02.04.05 Dept_sub02.04 
02.04.01 Dept_sub02.04.01 02.04.01.01 Dept_sub02.04.01 
02.04.01 Dept_sub02.04.01 02.04.01.02 Dept_sub02.04.01 
Dept       01. Dept_sub01 
Dept       02. Dept_sub02 
Dept       03. Dept_sub03 

어떻게 다음을 수행 않습니다는 SQL 배경에서 오는

난 그렇게 (업데이트)과 같은 쿼리를 가지고 장고에? UNION은 쉬운 부분이므로 쿼리의 해당 부분을 무시하십시오. 중요한 부분은 다음과 같습니다.

jobmst_id는 테이블의 기본 키입니다. jobmst_prntid는 jobmst_id와 동일하지만 동일한 행에 없습니다 (위에서 볼 수 있음).

내가이 계층 구조 트리를 할 수 있지만 내 JSON이 원하는 것을 할 수 있도록 JSON을 생성하기 위해 노력하고있어 설치와 같은 -

{PARENT_NAME : 부서, 이름 : Dept}, {PARENT_NAME :학과 , 이름 : Dept53452}

테이블에 내부 조인을했는데 문제는 jobmst_id와 jobmst_prntid가 모두 jobmst_name에서 값을주고 다른 값이 될 것이라고 말하고 싶습니다. 각 키의 값.

희망이 있습니다.

UPDATE - 내가 할 노력하고있어 정확하게 설명하는이 발견 -

django self join query using aliases

을하지만 반드시 'jobmst_name'동안 그것은 본질적으로 'jobmst_name'을 보여 얻는 방법을 설명하지 않습니다 같은 열을 쿼리하고 있어도 하나의 부모 이름과 다른 이름의 자식 이름을 알려줍니다.

편집 - 여기 내가 다루는 모델이 있습니다. 나는 해결책을 발견했다과 같은 문제가 발생할 수 있습니다 사람들을위한

class Jobmst(models.Model): 
    jobmst_id = models.IntegerField(primary_key=True) 
    jobmst_type = models.SmallIntegerField() 
    jobmst_prntid = models.IntegerField('self', null=True, blank=True) 
    jobmst_active = models.CharField(max_length=1, blank=True) 
    evntmst_id = models.IntegerField(blank=True, null=True) 
    jobmst_evntoffset = models.SmallIntegerField(blank=True, null=True) 
    jobmst_name = models.TextField(blank=True) 
    jobmst_mode = models.SmallIntegerField(blank=True, null=True) 
    jobmst_owner = models.ForeignKey('Owner', db_column='jobmst_owner', related_name = 'Jobmst_Jobmst_owner', blank=True, null=True) 
    jobmst_desc = models.TextField(blank=True) # This field type is a guess. 
    jobmst_crttm = models.DateTimeField() 
    jobdtl_id = models.IntegerField(blank=True, null=True) 
    jobmst_lstchgtm = models.DateTimeField(blank=True, null=True) 
    jobmst_runbook = models.TextField(blank=True) # This field type is a guess. 
    jobcls_id = models.IntegerField(blank=True, null=True) 
    jobmst_prntname = models.TextField(blank=True) 
    jobmst_alias = models.CharField(max_length=10, blank=True) 
    jobmst_dirty = models.CharField(max_length=1, blank=True) 
    def __unicode__(self): 
     return self.jobmst_name 
    class Meta: 
     managed = False 
     db_table = 'jobmst' 

답변

0

(예. MPTT 레거시 데이터베이스 작업! 얻는 방법)

나는 여기에 MPTT 튜토리얼의 시작을 통해 실행 -

http://django-mptt.github.io/django-mptt/tutorial.html

그때 내 SSMS를 열어 장고 mptt 테스트를위한 테이블을 생성 한 방법을 보았다.

LFT, rght, tree_id, 수준

뿐만 아니라 FK/PK 연결 - 그때 내 기존 테이블에서 누락 된 열을 다시. polls.models에서

이 Jobmst Jobmst.objects 가져 -

는 거기에서 나는 단순히 쉘에서 모델을로드 할 수 있었다.다시 작성()

밤! 그런 다음 모델을 실행하여 필요한 모든 값을 만들었습니다.

이제 나머지 튜토리얼을 수행 할 수 있습니다. 트리보기 결과를 얻을 수 있으므로 json으로 가져와 d3으로 가져올 수 있습니다.

누군가가이를 발견하고 질문이있는 경우 나에게 msg를 보내십시오.