2013-03-12 40 views
0

如果我有一個表設置,如:SQL查詢EXCEPT

╔══════╦══════╗ 
║ A ║ B ║ 
╠══════╬══════╣ 
║ Sam ║ sec2 ║ 
║ Sam ║ sec2 ║ 
║ Sam ║ sec2 ║ 
║ Fred ║ sec1 ║ 
║ Fred ║ sec2 ║ 
║ Fred ║ sec1 ║ 
║ Joe ║ sec1 ║ 
║ Joe ║ sec1 ║ 
╚══════╩══════╝ 

我想要的結果是

╔═════╦══════╗ 
║ A ║ B ║ 
╠═════╬══════╣ 
║ Sam ║ sec2 ║ 
║ Sam ║ sec2 ║ 
║ Sam ║ sec2 ║ 
║ Joe ║ sec1 ║ 
║ Joe ║ sec1 ║ 
╚═════╩══════╝ 

所以基本上我想查詢誰是人民秒-1或秒2,但不是兩個,我想留下重複。

我嘗試:

SELECT A, B 
FROM TABLE 
WHERE (A = 'SAM' OR A = 'FRED' OR A = 'JOE') AND NOT (B = 'sec1' AND B = 'sec2') 

回答

3

好吧,如果你有表上的其它多個列此查詢是非常有用的。子查詢的功能是分別得到僅用於BAMAX(B) = MIN(B)COUNT(DISTINCT B) = 1相同。子查詢的結果然後通過列A連接回表中。

SELECT y.* 
FROM tableName y 
     INNER JOIN 
     (
      SELECT A 
      FROM tableName 
      GROUP BY A 
      HAVING MAX(B) = MIN(B) 
        AND MAX(B) IN ('sec1', 'sec2') 
     ) x ON y.A = x.A 

OR

SELECT y.* 
FROM tableName y 
     INNER JOIN 
     (
      SELECT A 
      FROM tableName 
      GROUP BY A 
      HAVING COUNT(DISTINCT B) = 1 
        AND MAX(B) IN ('sec1', 'sec2') 
     ) x ON y.A = x.A 
+0

大1 + ........... – 2013-03-12 03:08:34

+0

嘿@JW 。你能向我解釋一下這個問題嗎? – 2013-03-12 03:11:40

+0

@DeadMan查看我的更新。 – 2013-03-12 03:15:06