自我加入MYSQL父子

时间:2018-02-14 06:57:19

标签: mysql

出于某种原因,这是今晚我的想法。我有3个表,约会,客户,任务。我正在尝试获取今天或明天的所有约会,检查用户表以提取当前客户端和任何家庭成员,然后提取符合其他条件的任务以获取当天或过期的任务的完整列表。

在客户端表上,我们从另一个数据源导入信息,保持原始id为reference_id,如果他们没有parent_id,则他们是父级,否则他们是子级。

appointment table
id    |    user_id    |    client_id   |   start_at  
1             1                2          2018-02-15
2             1                1          2018-02-15
3             1                2          2018-02-15
4             2                4          2018-02-15

clients table:
id    |  reference_id   |   parent_id   | user_id
1           35                null           1
2           36                 35            1
3           37                 35            1
4           35                null           2
5           36                 35            2

tasks table
id    |   client_id    |      task       |  due_date  
1             2           do something     2018-02-15  
2             4           do something     2018-01-10  
3             2           do something     2018-02-01
4             2           do something     2018-05-15  

我开始尝试将表连接到自身,但是当我尝试组合父项时,它最终会杀死所有结果,但只有当我向查询添加WHERE parent_id > 0时才会这样做。在此之前我得到了大约40个结果,但应该远远超过100.在数据集中,我有50个约会,一些用户有2-5个孩子/关系,但我不确定为什么,因为我正在做{{1}而不是内连接,如果有什么我应该开始以冗余的额外结果结束。

LEFT JOIN

有没有比加入客户端表3次更好的设计方法?为什么它会删除添加SELECT start_at, clients.id, clients.reference_id, clients.parent_id, clients.first_name, clients.last_name, children.user_id, children.first_name, children.last_name, children.reference_id, children.parent_id, parents.last_name FROM `reminderdental2`.`appointments` AS appointment INNER JOIN clients AS clients ON appointment.patient_id = clients.id INNER JOIN clients AS children ON clients.parent_id = children.parent_id LEFT JOIN (SELECT reference_id, user_id, last_name, first_name, parent_id FROM clients WHERE parent_id > 0) AS parents ON clients.parent_id = parents.reference_id WHERE clients.user_id = '27' AND children.user_id = '27' AND parents.user_id = '27' AND start_at > NOW() - INTERVAL 1 DAY AND start_at < NOW() + INTERVAL 1 DAY 的查询?

0 个答案:

没有答案