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