2013-05-06 114 views
-1

我有一個分貝這個信息(例如)MySQL的多個WHERE子句

EMAIL     COMING  
[email protected]  google 
[email protected]  google 
[email protected]  yahoo 
[email protected]  google 
[email protected]  yahoo 
[email protected]  google 

我就只提取值的範圍是「谷歌」例如,而不是從「雅虎」。所以,在我的SQL,我會因爲其他的都從谷歌& &雅虎只讀

[email protected] 

[email protected] 

所以,在代碼中,像

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

但顯然我的代碼的事情是錯誤的。

你能幫我嗎?謝謝:)

+0

從是在MySQL的保留字。從\''嘗試'\',或者更好的改變列名稱 – 1615903 2013-05-06 12:11:14

+0

請記住,具有'WHERE'子句的普通'SELECT'會逐行過濾,並且不會考慮其他行。 – tadman 2013-05-06 12:16:01

回答

2

FROM是一個保留關鍵字,你不應該在你的表列名稱中使用它。

如果你想保留這個關鍵字,您可以使用此要求:

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

編輯評論如下

+0

除了語法錯誤。您的查詢不會按預期返回。 – 2013-05-06 12:12:38

+0

你可以添加類似'AND email not in(SELECT email from mytable WHERE \'FROM \'='yahoo')''以排除所有那些與'yahoo'匹配? – tadman 2013-05-06 12:17:45

+0

對不起,顯然我只是一個例子。編輯表...但我需要幫助:) – sineverba 2013-05-06 12:18:14

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,'.%') 

OUTPUT

╔═════════════════╦════════╗ 
║  EMAIL  ║ COMING ║ 
╠═════════════════╬════════╣ 
║ [email protected] ║ google ║ 
║ [email protected] ║ google ║ 
╚═════════════════╩════════╝ 
+0

它不會在結果中顯示「text @ example.net」和「test @ example.com」兩個來都不存在。根據你的說法: – zessx 2013-05-06 13:54:01

+0

:「* ..我只提取來自「google」的值,而不是來自「yahoo」。所以,在我的SQL中,我只會讀取:'info @ domain.com'和'info @ super.net',因爲另一個是FROM google && yahoo ...「* - 爲什麼'example'域應該在列表中當他們從谷歌和雅虎?也許你可以更新你的問題,以滿足你的接受的答案。 – 2013-05-06 13:58:08

+0

有一個明顯的錯字,在原始的例子中都應該是'test @ example.net'。試圖解決一個從來沒有的問題 – zessx 2013-05-06 14:02:41