MySQL:选择包含与另一个表的所有相同字段匹配的字段的外键

时间:2010-11-07 00:49:30

标签: mysql select

从我正在阅读的内容来看,这是用分区运算符完成的那种事情,但显然在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匹配的操作 - 只有部分匹配,这不是我正在寻找的。有帮助吗?我正在看的那本书并不是特别有帮助。

2 个答案:

答案 0 :(得分:0)

我不是100%确定这是你所追求的,因为你的问题有点令人困惑,但我们会看到...

您似乎在子查询之后:

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

这将从您的表中选择GID与PID'A3'相关的任何GID匹配的所有行。你可能需要慢慢阅读它......它是满口的。

答案 1 :(得分:0)

所以你有一个GID列表,你想要列出所有GID的所有PID吗?

鉴于(例如,在您的程序语言中)您可以确定您拥有多少 GID,这是一个相当奇怪但可行的方法:

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