-1

我有一个包含此信息的数据库(示例)

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

例如,我将只提取来自“google”的值,而不是来自“yahoo”的值。所以,在我的 SQL 中,我会只读

info@domain.com

info@super.net

因为其他的是来自 google && yahoo。

所以,在代码中,像

SELECT * FROM mytable WHERE COMING = 'google' AND COMING != 'yahoo'

但显然我的代码是错误的。

你可以帮帮我吗?谢谢 :)

4

2 回答 2

2

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

如果你想保留这个关键字,你可以使用这个请求:

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

编辑以下评论

于 2013-05-06T12:11:09.660 回答
2

看看一个非规范化的表是如何为了满足您的需求而生成性能不佳的查询的,

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 ║
╚═════════════════╩════════╝
于 2013-05-06T12:33:01.490 回答