首页 > 解决方案 > 我想要三个表的左外连接

问题描述

我想做一个基于“PMP_MODEL”的“左外连接”,如下面的 SQL 查询所示。

SELECT  *
            FROM  PMP_MODEL A
            LEFT OUTER JOIN PMP_REPAIR_HISTORY B ON A.PMP_MANU_NUM = B.PMP_MANU_NUM
            LEFT OUTER JOIN SITE_INFO C ON A.PMP_MANU_NUM = C.PMP_MANU_NUM
            LEFT OUTER JOIN SITE_DETAIL_INFO D ON A.PMP_MANU_NUM = D.PMP_MANU_NUM
            WHERE A.PMP_MANU_NUM = ?

Django 模型.py

class PmpModel(models.Model):
    pmp_manu_num = models.CharField(db_column='PMP_MANU_NUM', primary_key=True, max_length=50, db_collation='utf8_general_ci')  # Field name made lowercase.
    pmp_model_nm = models.CharField(db_column='PMP_MODEL_NM', max_length=50, db_collation='utf8_general_ci', blank=True, null=True)  # Field name made lowercase.
    #~~~ many column


class PmpRepairHistory(models.Model):
    pmp_num = models.ForeignKey(PmpModel , on_delete = models.SET_NULL, null=True, db_column='pmp_manu_num' ,related_name='pmp_history')
    pmp_manu_num = models.CharField(db_column='PMP_MANU_NUM', primary_key=True, max_length=50, db_collation='utf8_general_ci')  # Field name made lowercase.
    #~~~ many column
   


class SiteDetailInfo(models.Model):
    pmp_manu_num = models.CharField(db_column='PMP_MANU_NUM', max_length=50, db_collation='utf8_general_ci')  # Field name made lowercase.
    #~~~ many column


class SiteInfo(models.Model):
    pmp_manu_num = models.CharField(db_column='PMP_MANU_NUM', max_length=50, db_collation='utf8_general_ci')  # Field name made lowercase.
    #~~~ many column
    

我尝试使用“select_related”,但它不起作用。

class PmpModelList(APIView):
    def get(self, request, format = None):
        pmpList = PmpModel.objects.select_related('pmp_manu_num')

        serialize = PmpModelSerializer(pmpList, many = True)
        return Response(serialize.data)

标签: sqldjangoorm

解决方案


推荐阅读