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