我是SQL连接的新手,并没有找到完成我需要的正确方法。我正在尝试编写一个每天运行一次的作业来收集id
表中的email
和customers
值,但仅适用于昨天发生的约会
注意:我正在使用专有系统,无权更改数据库中数据的组织方式。为了清楚起见,我已从此帖中排除了非重要字段。
在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
:
SELECT id
FROM appointments
其中DATE(start_date)= DATE(NOW() - INTERVAL 1 DAY);
使用appointments.id
customer_appointments.customer_id
值
使用customer_appointments.customer_id
customers.id
值
我已经做了几次尝试,但是我对连接的不了解确实在阻碍。 :)
您可以提供任何提示,我们将不胜感激。谢谢!
答案 0 :(得分:1)
你需要注意的一些事情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)
答案 1 :(得分:1)
通过这个,您将获得客户ID,约会ID和电子邮件:
SELECT a.id ,b.appointment_id,c.email
FROM appointments a
join customer_appointmens b on a.id=b.appointment_id
join customers c on c.id=b.customer_id
where DATE(a.start_date) = DATE(NOW() - INTERVAL 1 DAY);