从我正在阅读的内容来看,这是用分区运算符完成的那种事情,但显然在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 :(得分: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