Помогите преобразовать этот SQL-запрос в синтаксис «JOIN» - PullRequest
0 голосов
/ 09 сентября 2011

Я новичок в SQL. Может ли кто-нибудь помочь преобразовать этот запрос, чтобы он использовал синтаксис соединения?

SELECT groups.name,
       users.firstname,
       users.lastname,
       users.emailaddress,
       groupmembers.userid,
       reminders.groupid,
       reminders.ownerid,
       reminderdetails.recno,
       reminderdetails.cardid,
       reminderdetails.message
FROM   reminderdetails,
       reminders,
       groupmembers,
       users,
       groups
WHERE  assocdate = 'Y'
       AND ( reminder1 != 99
             AND ( Datediff(reminderdate, '2011-09-22') = reminder1 )
              OR ( reminder2 != 99
                   AND Datediff(reminderdate, '2011-09-22') = reminder2 ) )
       AND reminders.cardid = reminderdetails.cardid
       AND groupmembers.groupid = reminders.groupid
       AND groupmembers.sendemail = 'Y'
       AND users.recno = groupmembers.userid
       AND groups.recno = reminders.groupid

Ответы [ 2 ]

4 голосов
/ 09 сентября 2011

Попробуйте это:

SELECT g.name,
       uu.firstname,
       uu.lastname,
       uu.emailaddress,
       gp.userid,
       rm.groupid,
       rm.ownerid,
       rd.recno,
       rd.cardid,
       rd.message
FROM   reminderdetails rd
JOIN   reminders rm on rm.cardid=rd.cardId
JOIN   groupmembers gp on gp.groupid=rm.groupId and gp.sendemail='Y'
JOIN   users uu on uu.recNo=gp.userId,
JOIN   groups g ON g.recno=rm.groupId
WHERE  assocdate = 'Y'
       AND ( reminder1 != 99
             AND ( Datediff(reminderdate, '2011-09-22') = reminder1 )
              OR ( reminder2 != 99
                   AND Datediff(reminderdate, '2011-09-22') = reminder2 ) )
1 голос
/ 09 сентября 2011

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

Редактировать: только что видел другой; Как правило, я бы предпочел не загружать JOIN слишком большим количеством предложений, так как вы в конечном итоге отправляетесь на поиски повсюду, когда хотите узнать, какие предложения WHERE применяются. Если возможно, я думаю, что лучше оставить СОЕДИНЕНИЯ, содержащие только СОЕДИНЕНИЕ, а остальные поместить в ГДЕ.

Я уверен, что кто-то другой может прийти и застрелить меня на этом, но это мое мнение:)

SELECT groups.name,
       users.firstname,
       users.lastname,
       users.emailaddress,
       groupmembers.userid,
       reminders.groupid,
       reminders.ownerid,
       reminderdetails.recno,
       reminderdetails.cardid,
       reminderdetails.message
FROM   groups
INNER JOIN groupmembers ON groups.groupid = groupmembers.groupid
INNER JOIN users ON groupmembers.userid = users.userid
INNER JOIN reminders ON users.userid = reminders.ownderid
INNER JOIN reminderdetails ON reminders.cardid = reminderdetails.cardid
WHERE  assocdate = 'Y'
       AND ( reminder1 != 99
             AND ( Datediff(reminderdate, '2011-09-22') = reminder1 )
              OR ( reminder2 != 99
                   AND Datediff(reminderdate, '2011-09-22') = reminder2 ) )
AND groupmembers.sendemail = 'Y'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...