Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 帮助将此sql查询转换为“JOIN”语法_Mysql_Sql_Join - Fatal编程技术网

Mysql 帮助将此sql查询转换为“JOIN”语法

Mysql 帮助将此sql查询转换为“JOIN”语法,mysql,sql,join,Mysql,Sql,Join,我是SQL新手。有人可以帮助转换此查询,使其使用联接语法吗 SELECT groups.name, users.firstname, users.lastname, users.emailaddress, groupmembers.userid, reminders.groupid, reminders.ownerid, reminderdetails.recno, reminderd

我是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
试试这个:

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 ) )
试试这个:

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 ) )

在不知道你的桌子结构的情况下有点猜测,但我认为这似乎是正确的

编辑:刚刚看到另一个;我通常不希望在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'

在不知道你的桌子结构的情况下有点猜测,但我认为这似乎是正确的

编辑:刚刚看到另一个;我通常不希望在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'

什么是assocdate、rementer1、rementer2和rementerDate?我的意思是,它们都是变量吗?@Andrey:它们是表RemiderDetails中的列,分别是assocdate、rementer1、rementer2和rementerDate?我的意思是,它们都是变量吗?@Andriy:它们是表RemiderDetails中的列。我不确定MySQL是否允许在引用列时将表名与同一个表的别名混合使用,但无论如何,如果您为表定义了别名,为什么要改为使用原始名称?我说的是查询的SELECT子句中的引用。为完整起见,不,如果您对原始表名使用了别名,则不能使用原始表名。我认为这适用于任何别名;如果你给一列加别名,它的原始名称将不再可用,依此类推。@Joe:这取决于你的意思。例如,您可以在SELECT子句中为列添加别名,并仍然按原始名称按顺序引用它们。但是,如果您的意思是从外部选择访问子选择的列,那么是的,您只能通过别名而不是“真实”名称引用别名列。感谢您对表别名的确认。我不确定MySQL是否允许在引用列时将表名与同一个表的别名混合使用,但无论如何,如果您已经为表定义了别名,为什么要使用原始名称呢?我说的是查询的SELECT子句中的引用。为完整起见,不,如果您对原始表名使用了别名,则不能使用原始表名。我认为这适用于任何别名;如果你给一列加别名,它的原始名称将不再可用,依此类推。@Joe:这取决于你的意思。例如,您可以在SELECT子句中为列添加别名,并仍然按原始名称按顺序引用它们。但是,如果您的意思是从外部选择访问子选择的列,那么是的,您只能通过别名而不是“真实”名称引用别名列。感谢您对表别名的确认。