使用以下整数列:
iid,pid,aid
我最终会得到类似的东西:
1,1,1
1,1,2
1,1,3
2,1,1
2,1,2
2,1,4
如果我想选择iid,其中pid是1,援助是1,2,3,那么最好的方法是什么?做一个
SELECT iid WHERE pid=1 and (aid=1 OR aid=2 OR aid=3)
返回每一行但最后一行。
是否有更好的表结构可供使用? pid是另一个表中可以有多个值的行。此表为我提供了iid,即具有特定值的该行的主ID。但是,没有设定数量的值,所以看起来我需要1到多个表,但是尝试将其降低到1 iid似乎效率低下。
答案 0 :(得分:1)
如果要使用当前的表结构,可以执行以下操作以选择所需的iid。
SELECT
iid, pid, GROUP_CONCAT(aid) as grp
FROM
test
WHERE
pid = 1
GROUP BY
pid, iid
HAVING
grp = '1,2,3';
+------+------+-------+
| iid | pid | grp |
+------+------+-------+
| 1 | 1 | 1,2,3 |
+------+------+-------+
1 row in set (0.06 sec)
使用组查询,您可以看到AID属性一起按PID分组,然后是IID。
SELECT iid, pid, GROUP_CONCAT(aid) as grp
FROM test
GROUP BY pid, iid;
+------+------+-------+
| iid | pid | grp |
+------+------+-------+
| 1 | 1 | 1,2,3 |
| 2 | 1 | 1,2,4 |
+------+------+-------+
2 rows in set (0.03 sec)