2011-03-23 34 views
3

我已經充分傷害了我的大腦,試圖找出背後的邏輯。本身加入表格

我有一個表如下

entry_id | cat_id 
     1 | 233 
     1 | 234 
     1 | 678 
     2 | 235 
     2 | 453 
     2 | 21 
     3 | 234 
     3 | 123 

有沒有辦法在一個單一的查詢,這也與同一條目ID相關的每個類別ID返回。因此,select語句會選擇基於該CAT_ID,例如234什麼會被返回的類別ID: 233,678,123

+2

你的意思是233,234和678? – climbage 2011-03-23 15:31:53

+1

@climbage:不,233,678和123似乎是對的。除非他還想要他正在尋找的id(234)。 – 2011-03-23 15:39:57

+0

啊,我錯過了234也是條目3的一部分,這就是爲什麼我感到困惑。進行 – climbage 2011-03-23 15:43:25

回答

10
SELECT t2.cat_id 
FROM mytable t1 
JOIN mytable t2 
ON  t2.entry_id = t1.entry_id 
     AND t2.cat_id <> t1.cat_id 
WHERE t1.cat_id = 234 
+0

看到OP想要什麼,應該是'SELECT DISTINCT t2.cat_id',不應該嗎? – 2011-03-23 15:51:05

+0

@ypercube:它可能會或可能不會是這樣,我們並不確切地知道。也許他會想要統計類別上的比賽,或者其他什麼。 – Quassnoi 2011-03-23 15:52:40

+0

你已經釘住了它,而Eugene在速度方面比你快一點,這個查詢對我的數據庫的處理速度更快。我不知道標記答案的禮儀是否正確,所以如果我應該把你標記爲正確的答案,尤金,我很抱歉:P – Macgyver 2011-03-23 16:10:49

1
select t1.* 
from yourtable t1 
join yourtable t2 on (t1.entry_id=t2.entry_id and t1.cat_id<>t2.cat_id) 
where t2.cat_id=[your cat] 
5
SELECT cat_id FROM table 
    WHERE entry_id IN (SELECT entry_id FROM table WHERE cat_id = 234) 
AND cat_id <> 234 
+0

該查詢將在@op提供的數據上失敗。 – Quassnoi 2011-03-23 15:33:30

+0

不,它不會。該類別不是唯一的。 – Nikki9696 2011-03-23 15:35:14

+0

@Quassnoi:爲什麼這會失敗? – 2011-03-23 15:35:53