我是SQL联接的新手,还没有找到完成我需要的正确方法。我正在尝试编写一份每天运行一次的作业,以从id
表中收集email
和customers
值,但仅适用于昨天发生的约会。
注意:我正在使用专有系统,并且无权更改db中数据的组织方式。为了清楚起见,我从这篇文章中排除了不重要的字段。
假定以下三个表结构和mySQL中的数据:
表:客户
id | email
1 | user@domain.com
2 | user2@domain.com
...
表格:customer_appointments
customer_id | appointment_id
1 | 200
2 | 201
1 | 202
2 | 203
...
表:约会
id | start_date
200 | 2018-04-02 00:09:00
201 | 2018-04-02 00:10:00
202 | 2018-04-03 00:09:00
203 | 2018-04-03 00:01:00
...
我想我需要做的是:
使用以下命令从
appointments.id
中选择昨天发生的所有appointments
:从
id
中选择appointments
,其中DATE(开始日期)= DATE(NOW()-间隔1天);将
appointments.id
值与customer_appointments.customer_id
结合在一起将
customer_appointments.customer_id
值与customers.id
结合在一起我做了几次尝试,但是我对联接的缺乏了解确实妨碍了我。 :)
您可以提供的任何提示将不胜感激。谢谢!
最佳答案
您需要注意的几件事1)select中的id含糊不清,您需要使用表名(或其别名)来限定它2)wp_ab_customers.id.id-可能是错字,但.id只能出现一次3 )=运算符之后的日期测试未正确括起来4)您需要颠倒连接的顺序-在这种情况下,mysql需要自上而下阅读,即wp_ab_customers >> wp_ab_customer_appointments >> wp_ab_appointments 5)使用表别名会使这很容易阅读。
所以这是最后整理的代码
SELECT wp_ab_customers.id,email ,wp_ab_appointments.start_date
FROM wp_ab_customers
INNER JOIN wp_ab_customer_appointments ON wp_ab_customer_appointments.customer_id = wp_ab_customers.id
INNER JOIN wp_ab_appointments ON wp_ab_customer_appointments.appointment_id = wp_ab_appointments.id
where DATE(wp_ab_appointments.start_date) = (date(now()) - interval 1 day);
+------+------------------+---------------------+
| id | email | start_date |
+------+------------------+---------------------+
| 1 | user@domain.com | 2018-04-02 00:09:00 |
| 2 | user2@domain.com | 2018-04-02 00:10:00 |
+------+------------------+---------------------+
2 rows in set (0.02 sec)
并带有表别名
SELECT c.id,email ,a.start_date
FROM wp_ab_customers as c
INNER JOIN wp_ab_customer_appointments as ca ON ca.customer_id = c.id
INNER JOIN wp_ab_appointments as a ON ca.appointment_id = a.id
where DATE(a.start_date) = (date(now()) - interval 1 day);
+------+------------------+---------------------+
| id | email | start_date |
+------+------------------+---------------------+
| 1 | user@domain.com | 2018-04-02 00:09:00 |
| 2 | user2@domain.com | 2018-04-02 00:10:00 |
+------+------------------+---------------------+
2 rows in set (0.00 sec)
关于mysql - 三向SQL连接遇到问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49632506/