MySQL:在不知道该列值的情况下选择1列相同的行?

时间:2011-03-15 15:02:39

标签: mysql database-design

使用以下整数列:
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似乎效率低下。

1 个答案:

答案 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)