我有2个共享同一列的表Survey ID,因此想通过将它们INNER JOIN一起USING应用到该Survey ID列上来联接它们。这似乎不起作用,我很好奇为什么?
放弃INNER JOIN而不是SELECT在多个表上都可以成功,但是感觉并不正确,我想知道为什么。
无法运作:
SELECT t1.Survey ID
, t1.Hotel INN Code
, t1.What did you like about your stay?
, t1.What could have been done to improve your stay?
, t2.Positive
, t2.Negative
FROM medallia_import_SHGIC
t1 WHERE t1.Survey ID
= '3094252278' INNER JOIN medallia_problem_review
t2 USING (Survey ID
) 工作中
SELECT a.Survey ID
, a.Hotel INN Code
, b.Survey ID
, b.Positive
, b.Negative
FROM medallia_import_SHGIC
a, medallia_problem_review
b WHERE a.Survey ID
= '3094252278' AND b.Survey ID
= '3094252278' 按照@nick的建议,第一个查询似乎存在语法问题,这就是它的外观
SELECT t1.Survey ID
, t1.Hotel INN Code
, t1.What did you like about your stay?
, t1.What could have been done to improve your stay?
, t2.Positive
, t2.Negative
FROM medallia_import_SHGIC
t1 INNER JOIN medallia_problem_review
t2 USING (Survey ID
) WHERE t1.Survey ID
= '3094252278' 这个语法玩得更多,同样的问题
SELECT t1.Survey ID
, t1.Hotel INN Code
, t2.Positive
, t2.Negative
FROM medallia_import_SHGIC
t1 INNER JOIN medallia_problem_review
t2 ON t1.Survey ID
= t2.Survey ID
WHERE t1.Survey ID
= '3094252278'
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
你的问题在于JOIN子句的放置和语法。在SQL中,INNER JOIN
应该放在FROM
子句之后,并且如果你使用USING
关键字来指定连接列,那么正确的语法是将它直接跟在INNER JOIN
后面,不需要再在SELECT或WHERE部分重复指定连接条件。
第一个查询不工作是因为WHERE
子句应当位于JOIN
子句之后。正确的写法应该是这样的:
SELECT t1.Survey_ID, t1.Hotel_INN_Code, t1.What_did_you_like_about_your_stay?,
t1.What_could_have_been_done_to_improve_your_stay?, t2.Positive, t2.Negative
FROM medallia_import_SHGIC t1
INNER JOIN medallia_problem_review t2 USING (Survey_ID)
WHERE t1.Survey_ID = '3094252278';
然而,你提到的表名和列名包含空格,这在SQL中是不标准的,通常需要使用反引号(``)或者方括号([]),具体取决于数据库系统。但为了普遍适用性和简化理解,我已将它们替换为下划线(_)分隔的标准命名方式。
第二个查询之所以能工作,是因为它正确地使用了逗号分隔表名并在WHERE
子句中指定了等值连接条件,这是旧式的JOIN写法,虽然可行,但现代SQL更推荐使用显式的JOIN语法。
第三个查询你已经尝试修正了JOIN的位置,但是由于列名中的空格未被适当地处理(如果数据库系统要求的话),可能仍然会导致问题。确保如果数据库需要,对特殊字符或空格包围列名。
总结来说,确保JOIN语句的正确位置,遵循正确的语法结构,并且如果列名包含特殊字符,要根据所用数据库的规定进行适当处理。