2012-07-25 222 views
1


假設我有一個名爲「tblTemp」具有下列數據與多行條件SQL選擇數據

ID  Name 
1   A 
2   B 
3   C 
4   A 
4   B 
5   A 
5   B 
5   C 
6   C 
6   B 

我想從& B的名義獲得ID,但跟&乙表&ç象下面這樣:

4   A 

4   B 

我該如何在sql中這樣做?

我嘗試以下SQL,但它返回5行,以及:

SELECT  tblTemp.ID, tblTemp.Name 
FROM   tblTemp INNER JOIN 
        tblTemp AS tbltemp_1 ON tblTemp.ID = tbltemp_1.ID 
WHERE  (tblTemp.Name = 'A') AND (tbltemp_1.Name = 'B') 
+2

問題標記爲[tag:mysql]和[tag:sql-server]。你在用哪個? – eggyal 2012-07-25 10:57:18

+0

對於所有那些,OP要ID和A,B,如果它也有C,它應該被省略 – Madhivanan 2012-07-25 11:02:24

+0

@Madhivanan我相信OP想精確設置比較... – 2012-07-25 11:08:30

回答

0

你只是想有A或B,但不是C不同ID的列表?我上面的解決方案適用於'A'和/或'B',但我注意到你實際上想要'A'和'B'沒有或。在這種情況下:

SELECT distinct ID 
FROM tblTemp as T1 
INNER JOIN tblTemp as T2 
ON T1.ID = T2.ID 
WHERE T1.Name = 'A' and T2.Name = 'B' 

EXCEPT 

SELECT distinct ID 
FROM tblTemp 
WHERE Name = 'C' 

這是你的原碼的延伸,也許並不像@ Madhivanan的解決方案,優雅,但它是更普遍的應該在B和C的變化,例如字。

+0

否它會包含ID可能有名稱' C' – Madhivanan 2012-07-25 10:55:36

+0

會嗎?除外條款不包括名稱= C的集合,所以應該沒有剩下。我相當確信這是有效的。 – Dan 2012-07-25 11:09:32

+0

哦,你用EXCEPT,那麼它會工作我誤解爲UNION :) – Madhivanan 2012-07-25 11:15:14

0

嘗試:

SELECT distinct ID 
FROM tblTemp a 
    LEFT JOIN tblTemp b 
      ON a.ID = b.ID AND 
       b.name = 'C' 
WHERE b.ID IS NULL; 
0
select id from table 
group by id 
having min(Name)='A' and max(Nmae)='B' 
0
SELECT ID, Name FROM tblTemp WHERE (Name = 'A' OR Name = 'B') and ID not in(SELECT ID FROM tblTemp WHERE Name = 'C') 
2

一個比較套的方式是採取組由搜索集計數,過濾器組,看看每組比賽的數量等於原組成員數量:

select tblTemp.ID 
    from tblTemp 
inner join 
(
    select ID, 
      count(*) GroupCount 
    from tblTemp 
    group by ID 
    having count(*) = 2 
) g 
    on tblTemp.ID = g.ID 
where tblTemp.Name in ('A', 'B') 
group by tblTemp.Id, g.GroupCount 
having count (*) = g.GroupCount 

這應該對MySql和Sql Server都有效。

You can play with this code @ Sql Fiddle

+0

感謝尼古拉這個解決方案。它按我的預期工作。 – Pengan 2012-07-26 04:07:41

+0

不客氣:-) – 2012-07-26 06:02:01