用LEFT JOIN的教训

jackxiang 2008-9-10 15:11 | |
从前,有这样一个sql:
SELECT v.*,v2s_subject,v2s.v2s_vid, s.s_views FROM video2sites v2s
    LEFT JOIN videos v USING(v_id)
    LEFT JOIN stats s USING(v2s_id)
    WHERE m_id='$uid' AND v_censor IN(2,3,4) GROUP BY v.v_id
它一直工作得很正常,但有一天,它突然报错了。

报的错是说不能确定v2s_id,仔细检查一下,原来是videos表中为了查询方便也加入了一个“v2s_id”字段,using就傻了。

抛开数据库设计的因素不谈,其实这样的问题是可以避免的。方法很简单,就是用“ON”来代替“USING”。相信很多人像我一样,写程序的时候能少写一点就少写一点,这样做的后果就是往往会带来一些莫名其妙的麻烦。

改过之后的sql是这样的:
SELECT v.*,v2s_subject,v2s.v2s_vid, s.s_views FROM video2sites v2s
    LEFT JOIN videos v ON v.v_id= v2s.v_id
    LEFT JOIN stats s ON s.v2s_id=v2s.v2s_id
    WHERE m_id='$uid' AND v_censor IN(2,3,4) GROUP BY v.v_id
这么写虽然麻烦了些,但起码可以保证在某个表中添加字段的时候不会引起冲突。

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/1239/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!

评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]