开发者社区 问答 正文

SQL-内部联接+位置+使用

我有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'

展开
收起
保持可爱mmm 2019-11-18 11:49:24 303 分享 版权
阿里云 AI 助理回答

你的问题在于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语句的正确位置,遵循正确的语法结构,并且如果列名包含特殊字符,要根据所用数据库的规定进行适当处理。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: