我不知道如何在标题中解释,但这是我面临的问题。你知道吗
我需要写下,我认为是一个相对直截了当的查询(不管怎样,在SQL中也是如此):
SELECT
tasks.*,
resource_contact.*,
client_contact.*
FROM
tasks,
TaskResReln,
contact resource_contact,
TaskContact
contact client_contact,
WHERE
tasks.task_id = TaskResReln.task_id
AND TaskResReln.contact_code = resource_contact.contact_code
AND tasks.task_id = TaskContact.task_id
AND TaskContact.contact_code = client_contact.contact_code
在我眼里没有什么疑问;非常直截了当。。。然而,将其转换为SQL炼金术查询是我的工作
tasks = db.session.query(Tasks,client_contact,resource_contact)\
.join(TaskResReln, resource_contact)\
.reset_joinpoint()\
.join(TaskContact, client_contact)
我在这里的想法是(从试图理解手册)。因为“Tasks”是query()中的第一个模型,所以它应该是重置点否?所以我想,首先连接资源端,重置连接,然后连接客户端。。。错了。你知道吗
它生成以下SQL:
FROM
tasks JOIN task_res_reln ON tasks.task_id = task_res_reln.task_id
JOIN contact AS contact_2 ON contact_2.contact_code = task_res_reln.contact_code
JOIN task_contact ON contact_2.contact_code = task_contact.contact_code
JOIN contact AS contact_1 ON contact_1.contact_code = task_contact.contact_code
正如你所看到的,第一部分是做得很顺利,直到它击中任务\你接触。。。然后一切都从那里向南发展。你知道吗
如何实现我的查询?任何指向正确方向的指示都将不胜感激。你知道吗
我从文档中得到的印象是
reset_joinpoint()
应该与join()
的自动别名一起使用(当aliased=True
标志被传递给它时)。在您的情况下,您可以自己提供ON
子句:相关问题 更多 >
编程相关推荐