这是好的代码吗?可以用某种方式简化吗?
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;
答案 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
子句。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)?