2009-10-27 2 views
-1

этот хороший код? его можно как-то упростить?ms-access simpleing SQL code

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; 
+1

lol @ где 1 = 1 – JonH

+0

Фактически код заставляет меня хотеть рвать.тот, кто его написал, не знает, что такое GROUP BY или как сгруппировать по соответствующей области. – JonH

+2

держитесь в одном месте ... это похоже на ваши 10-ые вопросы за 20 минут? – Fredou

ответ

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; 
+0

ken спасибо, я пробовал и не видел улучшения –

+0

Нет никакого улучшения. Вы исключили три соединения; это само по себе должно было показать вам некоторое улучшение (если только оптимизатор MySQL в последнее время не стал намного лучше, и он устранял их, потому что вы никогда не ссылались ни на один из столбцов объединенной таблицы). –

3

Вы делаете это неправильно. Посмотрите на все ответы, уже предоставленные.

Перейдите в код.

Внесите необходимые изменения, чтобы загрузить только необходимые данные и только при необходимости.

Узнайте, почему групповые байты могут пострадать, если это не требуется, и как DISTINCTS может помочь.

Как вы можете упростить запрос?

1

Похоже на то, что создается из интерфейса Access Query-Builder. Это может быть упрощено, но я думаю, вы должны сначала понять, где используется код и что он пытается достичь, прежде чем модифицировать его.

Кроме того, если он не потребляет много ресурсов, вы действительно не хотите начинать преждевременно оптимизировать вещи.

1

Абрашка, есть несколько вещей, которые вы можете посмотреть в оптимизировать код SQL выше. Если возможно, я бы рекомендовал денормализовать схему таблиц связанных таблиц, чтобы уменьшить количество выполняемых объединений, а также избавиться от этой ненужной группы по предложению. СООТВЕТСТВУЮЩИЕ заявления также относятся к производительности, поэтому вы можете захотеть пересмотреть их использование.

0

Не выглядит тоже плохо для меня. Некоторые предложения:

  • Довольно форматирование, например. right-align ключевые слова запроса для создания «трубы» и отступ ON на новой линии .
  • Используйте ключевое слово AS перед именем корреляции .
  • Используйте ключевое слово DISTINCT, а не группировка по всей статье SELECT (лучше передает намерение).
  • Переместите предикаты 'фильтрации' из соединения и в пункт WHERE.
  • Удалить парсеры.
  • Удалите 1=1 предикат и использовать параметризованных 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)?

Смежные вопросы