使用三个表的SQL SELECT语句

时间:2018-10-22 13:09:41

标签: sql etl

我试图编写一条SQL Select语句,以将一些数据从Sybase环境移植到MongoDB环境中,而我只是想找出包含三个不同表的正确语法。

基本上我需要做的是在两个表上进行INNER JOIN,然后对第三个表进行匹配检查。这三个表名称分别是“ ar_notes”,“ customer_service_xref”和“ service_notes_details”

这是我尝试过的:

SELECT * FROM ar_notes arn
      LEFT JOIN customer_service_xref csx ON arn.customer_service_xref_id = csx.id_number
      WHERE arn.visit_date = service_notes_details.date_of_visit

这不起作用。我得到一个相关错误。

涉及到三个这样的表时,语法应该是什么样的?

1 个答案:

答案 0 :(得分:1)

您说您需要在三个表之间建立一个INNER JOIN,但是您的查询在两个表之间进行了LEFT JOIN,并尝试在WHERE子句中进行另一个联接,而没有在FROM子句中引用该表。

要解决您的查询问题,请执行以下操作:

SELECT * 
FROM service_notes_details snd, ar_notes arn
INNER JOIN customer_service_xref csx ON arn.customer_service_xref_id = csx.id_number
WHERE arn.visit_date = snd.date_of_visit

这是当前SQL语法中应使用的:

SELECT * 
FROM ar_notes arn
INNER JOIN customer_service_xref csx ON arn.customer_service_xref_id = csx.id_number
INNER JOIN service_notes_details ON arn.visit_date = service_notes_details.date_of_visit

请注意,这只会返回ar_notes中在customer_service_xref(由customer_service_xref_id连接)和service_notes_details(由{{1连接)中具有对应值的行}})。即使没有匹配的visit_date,使用LEFT JOIN的原始查询也会从ar_notes返回行。