2010-11-07 95 views
0

從我正在閱讀的內容來看,這就是要用分區操作符完成的事情,但顯然這不是在MySQL中實現的。基本上,我的設置是一個有兩列的表格,其中鍵列出多次,第二列中有不同的列表,例如,MySQL:選擇與其他表的字段匹配的所有字段的外鍵

PID | GID 
A1 | G1 
A1 | G2 
A2 | G1 
A2 | G3 
A3 | G1 
A3 | G2 
A4 | G2 
A4 | G3 

基本上,我必須找到基於PID和所有與之關聯的GID表的子集,例如,該A3分配所有的GID,這是很容易得到,產生中間表

PID | GID 
A3 | G1 
A3 | G2 

但是,什麼是給我的麻煩是搞清楚如何選擇原始表匹配所有的GID對這些記錄子集表。正如我所說的,我所能找到的所有東西都指向了一個分裂運算符,但這在MySQL中並不存在,所以我就像在我的繩索末端那樣。我找不到一種方法來加入或做一個匹配所有GID的操作 - 只有部分匹配,這不是我正在尋找的。任何幫助?我正在看的這本書不是特別有用。

回答

0

因此,你有一個GID列表,你想要所有的GID列表中的所有GID?

假設(例如,在你的程序語言),你可以決定有多少的GID有,相當奇怪,但可行的方法是這樣的:

SELECT FROM the_table WHERE GID IN ('G1','G2') GROUP BY PID HAVING COUNT(*) = 2 
+0

如果PID和GID不直接相關,則必須使用COUNT(DISTINCT GID)。 – AndreKR 2010-11-07 01:05:53

+0

這真的很漂亮 - 這是我嘗試的,但我的語法錯了;我認爲這是因爲我試圖計算不同的GID,這導致了問題。謝謝! – Stuart 2010-11-07 17:13:10

0

我不是100%肯定這是你後,因爲你的問題是有點混亂在做什麼,但我們會看到......

你似乎是一個子查詢後:

SELECT pid, gid FROM your_table WHERE gid in (SELECT gid FROM your_table WHERE pid = 'A3') 

這將從您的表中選擇GID與PID'A3'關聯的任何GID匹配的所有行。你可能需要慢慢讀一遍......這是一口。

+0

好了,有了,問題是,它會返回沒有來自子查詢的所有GID的PID。基本上,我需要這樣做,以便只有PID具有與A3相同的所有GID時纔會返回,並在部分時拒絕它們。因此,在我給出的示例表格的情況下,只有A1應該返回,因爲它是唯一一個G1和G2都是GID的,與A3相同。對不起,如果這有點混亂;我在搜索幫助時遇到了困難,主要是因爲我不確定如何使用它。 – Stuart 2010-11-07 01:05:43

+0

好吧,我陷入了困境。在MySQL中可能有一些深奧的方式(可能是條件),但是在應用程序層可能會更好地處理這個問題。讓我們看看是否有人更聰明地分享更好的方式。 – coreyward 2010-11-07 01:13:44

相關問題