ms访问简化SQL代码

时间:2009-10-27 18:57:40

标签: sql ms-access

这是好的代码吗?可以用某种方式简化吗?

    SELECT u.id,u.title,u.title,u.first,u.last FROM 
  (((tblusers u LEFT JOIN tbluserstudentteacher 
     ON u.id = tbluserstudentteacher.student_teacher_user_id) 
     LEFT JOIN tblUsersSubjects ON u.id = tblUsersSubjects.user_id) 
     LEFT JOIN tblUserAvailability ON u.id=tblUserAvailability.user_id) 
     LEFT JOIN chavrusas ON u.id=chavrusas.luser_id 
       WHERE 1=1 AND (u.gender) LIKE 'm*' 
       AND (chavrusas.luser_type)='shliach' 
       AND (chavrusas.ruser_type)='shliach' AND (u.last LIKE 'd*') 
 GROUP BY u.id, u.title, u.title, u.first, u.last 
 ORDER BY last;

5 个答案:

答案 0 :(得分:3)

你这样做是错误的。看看已经提供的所有答案。

跳转到代码。

根据需要进行更改,仅加载所需的数据,并且仅在需要时。

了解为什么如果不需要,小组会受到伤害,以及DISTINCTS如何提供帮助。

您如何简化查询?

答案 1 :(得分:1)

它看起来像是从Access Query-Builder界面生成的东西。它可以简化,但我认为您应该首先了解代码的使用位置以及在修改代码之前要尝试实现的内容。

此外,除非消耗大量资源,否则你真的不想过早地开始优化。

答案 2 :(得分:1)

从我对your other question的回答中,我也将其清理干净了。请参阅该帖子以了解原因。

SELECT u.id, u.title, u.first, u.last
  FROM (tblusers u LEFT JOIN chavrusas c ON u.id = c.luser_id
  AND u.gender LIKE 'm*'
  AND u.last LIKE 'd*'
  AND c.luser_type = 'shliach'
  AND c.ruser_type = c.luser_type)
ORDER BY last;

答案 3 :(得分:1)

Abrashka,您可以通过一些方法来优化上面的SQL代码。如果可能的话,我建议对所涉及的表的表模式进行非规范化,以帮助减少正在执行的连接数,以及去掉那个不必要的group by子句。 LIKE语句也是性能命中,因此您可能也想重新考虑使用它们。

答案 4 :(得分:0)

看起来对我不好。一些建议:

  • 漂亮的格式,例如右对齐 查询关键字创建'管道' 并在新的上缩进ON子句 线。
  • 在使用之前使用AS关键字 相关名称。
  • 使用DISTINCT关键字而不是 对整个SELECT子句进行分组(更好地传达意图)。
  • 移出'过滤'谓词 连接和WHERE子句。
  • 删除parens。
  • 删除1=1谓词并使用a 参数化PROCEDURE而不是 动态SQL;)

这样的事情:

SELECT DISTINCT u.id, u.title, u.first, u.last
  FROM tblusers AS u 
       LEFT OUTER JOIN chavrusas AS c 
          ON u.id = c.luser_id
             AND c.ruser_type = c.luser_type
 WHERE u.gender LIKE 'm*'
       AND u.last LIKE 'd*'
       AND c.luser_type = 'shliach'
 ORDER 
    BY last;

还要检查您的SQL DDL。用户是否具有“性别”(男性,女性,中性等)或性别(ISO 5218)?