具有多个WHERE子句的MySQL

具有多个WHERE子句的MySQL,mysql,sql,Mysql,Sql,我有一个数据库和这个信息示例 EMAIL COMING info@domain.com google test@example.net google text@example.net yahoo info@super.net google testing@foo.com yahoo testing@foo.com google 我将只提取来自谷歌的价值,而不是来自雅虎。因此,在我的SQ

我有一个数据库和这个信息示例

EMAIL                 COMING    
info@domain.com       google
test@example.net      google
text@example.net      yahoo
info@super.net        google
testing@foo.com       yahoo
testing@foo.com       google
我将只提取来自谷歌的价值,而不是来自雅虎。因此,在我的SQL中,我将是只读的

info@domain.com

因为另一个来自谷歌和雅虎

所以,在代码中,像

SELECT * FROM mytable WHERE COMING = 'google' AND COMING != 'yahoo'
但很明显我的代码是错的

你能帮我吗?谢谢:

FROM是一个保留关键字,您不应该在表列名中使用它

如果要保留此关键字,可以使用此请求:

SELECT * 
FROM mytable 
WHERE `FROM` = 'google'
AND email NOT IN (
    SELECT email 
    FROM mytable
    WHERE `FROM`='yahoo'
)

编辑以下评论

查看非规范化表如何生成性能不佳的查询,以满足您的需要

SELECT a.*
FROM   TableName a
       INNER JOIN
      (
          SELECT substr
          FROM
          (
              SELECT email,
                     REVERSE(SUBSTRING(REVERSE(SUBSTRING(email, LOCATE('@', email) + 1)),LOCATE('.', REVERSE(SUBSTRING(email, LOCATE('@', email) + 1)))+1)) substr,
                     coming
              FROM   tableName
          ) s
          GROUP BY substr
          HAVING COUNT(DISTINCT coming) = 1 AND
                 MAX(coming) IN ('yahoo','google')
      ) b ON a.email LIKE CONCAT('%@',b.substr,'.%')
输出

╔═════════════════╦════════╗
║      EMAIL      ║ COMING ║
╠═════════════════╬════════╣
║ info@domain.com ║ google ║
║ info@super.net  ║ google ║
╚═════════════════╩════════╝

from是mysql中的保留字。请尝试“from”,或者最好更改列名。请记住,正常的SELECT with WHERE子句是逐行筛选的,不会考虑其他行。除了语法错误之外。您的查询将不会按预期返回。您是否可以在“mytable”中的“SELECT email FROM”“FROM`='yahoo”中添加类似于和“email not”的内容,以排除所有与yahoo匹配的内容?抱歉,显然,my只是一个示例。编辑的表格。。。但我需要帮助:这是如何解决问题的?它将显示text@example.net在结果中,这两个字段都存在。它不会显示text@example.net和test@example.com根据你的陈述:……我只提取来自谷歌的价值,而不是来自雅虎的价值。因此,在我的SQL中,我将只读:info@domain.com和info@super.net因为另一个来自谷歌和雅虎…-当示例域来自google和yahoo时,为什么要出现在列表中?也许你可以更新你的问题,以满足你接受的答案。问题中显然有错别字,两者都应该是test@example.net在原始示例中。你只是想解决一个从未解决过的问题。@zessx不,我只是想帮忙,我很理解这个问题。你真的理解这个问题吗?无论如何,你的答案似乎是正确的,因为它被接受了:@zessx你怎么知道它是一个打字错误,哦,是的,如果是那么为什么是testing@foo.com不在结果列表中?
╔═════════════════╦════════╗
║      EMAIL      ║ COMING ║
╠═════════════════╬════════╣
║ info@domain.com ║ google ║
║ info@super.net  ║ google ║
╚═════════════════╩════════╝