Mysql 在主键以外的字段上连接到另一个表
假设我有Mysql 在主键以外的字段上连接到另一个表,mysql,sql,django,django-models,Mysql,Sql,Django,Django Models,假设我有Table\u A,我想将它加入Table\u B的两个字段中,school\u id和type\u id。在SQL中,这看起来像: SELECT whatever FROM Table_A INNER JOIN Table_B ON (Table_A.school_id = Table_B.school_id AND Table_A.type_id = Table_B.type_id) 据我所知,Django通过模型中定义的外键/主键进行连接。因此,如果要执行A.ob
Table\u A
,我想将它加入Table\u B
的两个字段中,school\u id
和type\u id
。在SQL中,这看起来像:
SELECT whatever
FROM Table_A
INNER JOIN Table_B
ON (Table_A.school_id = Table_B.school_id
AND Table_A.type_id = Table_B.type_id)
据我所知,Django通过模型中定义的外键/主键进行连接。因此,如果要执行
A.objects.filter(B_ufield2=“stuff”)
操作,除了将表\u B.field2=stuff
放在WHERE
子句中之外,它还会隐式地加入A.B_uid=B.id
。是否有一种方法可以代替我选择的键进行连接,如上面的SQL查询?如果用这种形式表示查询仍然有效:
SELECT whatever FROM Table_A, Table_B WHERE (Table_A.school_id = Table_B.school_id
AND Table_A.type_id = Table_B.type_id)
(这相当于您上面的示例…)那么可以通过Django ORM和条款实现这一点,例如:
TableA.objects.extra(
tables=['myapp_tableb',],
where=['myapp_tablea.school_id=myapp_tableb.school_id',
'myapp_tablea.type_id=myapp_tableb.type_id']
)
我意识到,在SQL中可能会有一些复杂的连接,它们本身不适合这种连接
丑陋的部分是你必须使用真正的SQL表名而不是Django模型名,它有点接近原始SQL。。。但是你会得到一个普通的Django QuerySet对象 如果用此表单表示您的查询仍然有效:
SELECT whatever FROM Table_A, Table_B WHERE (Table_A.school_id = Table_B.school_id
AND Table_A.type_id = Table_B.type_id)
(这相当于您上面的示例…)那么可以通过Django ORM和条款实现这一点,例如:
TableA.objects.extra(
tables=['myapp_tableb',],
where=['myapp_tablea.school_id=myapp_tableb.school_id',
'myapp_tablea.type_id=myapp_tableb.type_id']
)
我意识到,在SQL中可能会有一些复杂的连接,它们本身不适合这种连接
丑陋的部分是你必须使用真正的SQL表名而不是Django模型名,它有点接近原始SQL。。。但是你会得到一个普通的Django QuerySet对象 由于某种原因,
A.B_id=B.id
不正确吗?我不想这样限制它。。我想允许Table_A
加入Table_B
即使Table_A
不是它的孩子,你确定这是解决任务的最佳(或唯一)方法吗?你能展示你的模型并描述你想要得到的结果吗?是不是因为某种原因,A.B_id=B.id
不正确?我不想这样限制它。。我想允许Table_A
加入Table_B
即使Table_A
不是它的孩子,你确定这是解决任务的最佳(或唯一)方法吗?你能展示你的模型并描述你想要得到的结果吗?