Sql django内部连接相同列不同结果

Sql django内部连接相同列不同结果,sql,django,json,Sql,Django,Json,我想我这里可能有个解决办法- 这基本上是以不同的方式来处理我的问题,我希望这与我在下面的帖子有所不同 我有一个SQL后台查询,看起来更新得很快- 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

我想我这里可能有个解决办法-

这基本上是以不同的方式来处理我的问题,我希望这与我在下面的帖子有所不同

我有一个SQL后台查询,看起来更新得很快-

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)
在Django中如何执行以下操作?联合是最简单的部分,所以忽略查询的这一部分。重要部分如下:

jobmst_id是表的主键。jobmst_prntid与jobmst_id相同,但不在如上所示的同一行中

我正在尝试生成json,这样我就可以创建继承人树,但要做到这一点,我希望我的json像这样设置-

{parent_name:Dept,name:Dept01234},{parent_name:Dept,name:Dept53452}

我已经对一个表进行了内部联接,但问题是我想告诉它,jobmst_id和jobmst_prntid都将从jobmst_name中给我一个值,并且每个键上的值都不同

希望这是有意义的

更新-找到了这个,它准确地解释了我要做的事情-

但它不一定解释如何让它本质上显示“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'

对于任何可能遇到与我相同问题的人,我找到了解决方案,即如何让MPTT使用遗留数据库

我在这里浏览了MPTT教程的开头部分-

然后,我打开SSMS,查看django mptt是如何为测试创建表的。然后,我重新创建了旧表中缺少的列-

lft,rght,树id,标高

以及FK/PK连接

从那以后,我只需将模型装入shell-

从polls.models导入Jobmst Jobmst.objects.rebuild

砰!然后,它通过运行模型创建了我需要的所有值

现在我可以完成本教程的其余部分,现在我可以得到我的树视图输出,只需要得到json格式的输出,这样我就可以导入d3了

如果有人发现了这个,有问题就发短信给我

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'