我是SQL联接的新手,还没有找到完成我需要的正确方法。我正在尝试编写一份每天运行一次的作业,以从id表中收集emailcustomers值,但仅适用于昨天发生的约会。

注意:我正在使用专有系统,并且无权更改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/

10-10 13:52
查看更多