2012-02-29 64 views
0

如果我删除USING (nid,sid),我得到的列是ambigious错误。我不太明白USING在这里做什么?它是否加入了nid和sid从子查询返回到nid,sid在外部select查询中?不明白在MySQL中使用语法

SELECT sid, nid, max_rating FROM outcomes 
JOIN (SELECT nid, sid, MAX(rating) AS max_rating from outcomes group by nid, sid) AS newtable 
USING (nid, sid) 
WHERE rating = max_rating AND name LIKE '%test%' 

回答

3

是,USING被用来连接同时使用nidsid两个表。但它增加了优势。

  • 首先,你的结果不会有重复的列nidsid,为USING声明合并列在一起。第二,如果您想在WHERE子句中使用nidsid,则不需要指定要为该列使用哪个表,您可以直接使用类似sid > 10之类的内容。
+0

请注意,这仅在PostgreSQL和MySQL中受支持。 – Subodh 2012-02-29 12:32:29

2

USING(column_list)子句命名两个表中必须存在的列的列表。如果表A和B都包含列C1,C2和C3,以下加入来自这两个表进行比较相应的列:

a LEFT JOIN b USING (c1,c2,c3) 

以上是从MySQL的文档获取的。我希望这是有帮助的。

+0

链接位于:http://dev.mysql.com/doc/refman/5.0/en/join.html – 2012-02-29 12:35:03