Mysql 如何将NOT子句添加到SQL查询中

Mysql 如何将NOT子句添加到SQL查询中,mysql,sql,Mysql,Sql,我想在此SQL查询中添加NOT子句: Select members.Member_Id, members.Title, members.FirstName, members.LastName, members.Po_Box, members.Street, members.City, members.Del, members.Mobile, members.eMail, members.

我想在此SQL查询中添加NOT子句:

Select 
    members.Member_Id, 
    members.Title, 
    members.FirstName, 
    members.LastName, 
    members.Po_Box, 
    members.Street, 
    members.City, 
    members.Del, 
    members.Mobile, 
    members.eMail, 
    members.WFTD, 
    ship_info.Renewal_Date
From 
    members 
Left Join
    ship_info on (members.Member_Id = ship_info.Member_Id)
Order By
    ship_info.Renewal_Date
NOT条款是这样的:

Where Member_Id Not Between 2000 And 3000;
我试着把这一行放在不同的地方,但每次都会出错,而且因为Wamp用法语报告错误,所以我觉得它没有用

是的,也有类似的问题,但它们让我更加困惑,因为我对它们的理解不够,无法相应地修改我的脚本。我对数组和复杂代码了解不多

我从数据库中导出数据用于邮件合并,Id在2000年代的成员是被删除的成员,其Id从原始Id移动到更高的数字,因为我不喜欢永久删除人,以防他们以后改变主意


谢谢。

由于您使用的是联接,并且联接的两个表中都有成员id字段,因此必须指定需要where语句的表。尝试:

SELECT members.Member_Id
    ,members.Title
    ,members.FirstName
    ,members.LastName
    ,members.Po_Box
    ,members.Street
    ,members.City
    ,members.Del
    ,members.Mobile
    ,members.eMail
    ,members.WFTD
    ,ship_info.Renewal_Date
FROM members
LEFT JOIN ship_info ON (members.Member_Id = ship_info.Member_Id)
WHERE members.Member_Id NOT BETWEEN 2000
        AND 3000
ORDER BY ship_info.Renewal_Date

由于您使用的是JOIN,并且member_id字段位于JOIN的两个表中,因此必须指定需要where语句的表。尝试:

SELECT members.Member_Id
    ,members.Title
    ,members.FirstName
    ,members.LastName
    ,members.Po_Box
    ,members.Street
    ,members.City
    ,members.Del
    ,members.Mobile
    ,members.eMail
    ,members.WFTD
    ,ship_info.Renewal_Date
FROM members
LEFT JOIN ship_info ON (members.Member_Id = ship_info.Member_Id)
WHERE members.Member_Id NOT BETWEEN 2000
        AND 3000
ORDER BY ship_info.Renewal_Date

您可以这样尝试:

Select members.Member_Id
  ,members.Title
  ,members.FirstName
  ,members.LastName
  ,members.Po_Box
  ,members.Street
  ,members.City
  ,members.Del
  ,members.Mobile
  ,members.eMail
  ,members.WFTD
  ,ship_info.Renewal_Date
From members 
LEFT JOIN ship_info ON (members.Member_Id=ship_info.Member_Id)

WHERE (members.Member_ID < 2000 OR members.member_ID > 3000)

ORDER BY ship_info.Renewal_Date

您可以这样尝试:

Select members.Member_Id
  ,members.Title
  ,members.FirstName
  ,members.LastName
  ,members.Po_Box
  ,members.Street
  ,members.City
  ,members.Del
  ,members.Mobile
  ,members.eMail
  ,members.WFTD
  ,ship_info.Renewal_Date
From members 
LEFT JOIN ship_info ON (members.Member_Id=ship_info.Member_Id)

WHERE (members.Member_ID < 2000 OR members.member_ID > 3000)

ORDER BY ship_info.Renewal_Date

我认为下面应该可以,如果不能,请指定您得到的错误,如果您使用这个表名作为别名,您只需要更好地为表名成员添加前缀

SELECT members.Member_Id
    ,members.Title
    ,members.FirstName
    ,members.LastName
    ,members.Po_Box
    ,members.Street
    ,members.City
    ,members.Del
    ,members.Mobile
    ,members.eMail
    ,members.WFTD
    ,ship_info.Renewal_Date
FROM members
LEFT JOIN ship_info ON (members.Member_Id = ship_info.Member_Id)
WHERE members.Member_Id NOT BETWEEN 2000
        AND 3000
ORDER BY ship_info.Renewal_Date

我认为下面应该可以,如果不能,请指定您得到的错误,如果您使用这个表名作为别名,您只需要更好地为表名成员添加前缀

SELECT members.Member_Id
    ,members.Title
    ,members.FirstName
    ,members.LastName
    ,members.Po_Box
    ,members.Street
    ,members.City
    ,members.Del
    ,members.Mobile
    ,members.eMail
    ,members.WFTD
    ,ship_info.Renewal_Date
FROM members
LEFT JOIN ship_info ON (members.Member_Id = ship_info.Member_Id)
WHERE members.Member_Id NOT BETWEEN 2000
        AND 3000
ORDER BY ship_info.Renewal_Date

根据数据库管理基础知识,以下是适当的语法:

Select members.Member_Id
  ,members.Title
  ,members.FirstName
  ,members.LastName
  ,members.Po_Box
  ,members.Street
  ,members.City
  ,members.Del
  ,members.Mobile
  ,members.eMail
  ,members.WFTD
  ,ship_info.Renewal_Date
From members 
LEFT JOIN ship_info ON (members.Member_Id=ship_info.Member_Id)

WHERE NOT members.Member_Id BETWEEN 2000 AND 3000

ORDER BY ship_info.Renewal_Date ;
在前面提到的书中,它说

可以在FROM或WHERE中指定JOIN语句 子句,但建议您在FROM子句中指定它们

关于条款优先顺序,以下是正确的顺序:

SELECT     -- "what" we want
FROM       -- "where" to look for it
JOIN
WHERE      -- condition 
GROUP BY  
HAVING
ORDER BY   -- sorting order

根据数据库管理基础知识,以下是适当的语法:

Select members.Member_Id
  ,members.Title
  ,members.FirstName
  ,members.LastName
  ,members.Po_Box
  ,members.Street
  ,members.City
  ,members.Del
  ,members.Mobile
  ,members.eMail
  ,members.WFTD
  ,ship_info.Renewal_Date
From members 
LEFT JOIN ship_info ON (members.Member_Id=ship_info.Member_Id)

WHERE NOT members.Member_Id BETWEEN 2000 AND 3000

ORDER BY ship_info.Renewal_Date ;
在前面提到的书中,它说

可以在FROM或WHERE中指定JOIN语句 子句,但建议您在FROM子句中指定它们

关于条款优先顺序,以下是正确的顺序:

SELECT     -- "what" we want
FROM       -- "where" to look for it
JOIN
WHERE      -- condition 
GROUP BY  
HAVING
ORDER BY   -- sorting order

查询中的两个表中存在您的Member\u Id列。您需要指定表名。您需要使用表名作为Member_id的前缀,因为它是模糊的。如果您指定得到的任何错误,则会更好,否则where子句会出现一个错误,您必须指定表别名,因为Member_id存在于两个表中,而Member_id列存在于查询的两个表中。您需要指定表名。您需要在Member_id前面加上表名,因为它是模糊的。如果您指定得到的任何错误会更好,否则where子句会出现一个错误,您必须指定表别名,因为Member_id存在于两个表中,所以