从前,有这样一个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
这么写虽然麻烦了些,但起码可以保证在某个表中添加字段的时候不会引起冲突。
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/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
评论列表