表mysql中没有任何关系的一对多映射

时间:2012-12-26 11:00:02

标签: mysql sql select

我有两个名为oc_users和oc_groups的表,两个表之间没有特定的关系,如下所示,所以,这里我想用每个组映射每个用户:

1)表1: 从oc_users中选择uid;

+-----------------+   
| uid             |    
+-----------------+   
| manesh@abc.in   |    
| pankaj          |    
| sumit           |    
+-----------------+

2)表2: 从oc_groups中选择gid;

+---------+    
| gid     |    
+---------+    
| qlc     |    
| qlc-web |    
+---------+

然后我想要o / p之类的:

+---------+-----------------+    
| gid     | uid             |    
+---------+-----------------+    
| qlc     | manesh@abc.in   |    
| qlc     | pankaj          |    
| qlc     | sumit           |    
| qlc-web | manesh@abc.in   |    
| qlc-web | pankaj          |    
| qlc-web | sumit           |    
+---------+-----------------+

3 个答案:

答案 0 :(得分:0)

您需要使用CROSS JOIN新SQL语法:ANSI SQL-92

SELECT gid, uid
FROM   oc_users CROSS JOIN oc_groups
ORDER BY gid, uid

答案 1 :(得分:0)

使用此

select * from oc_user , oc_groups ORDER BY gid, uidS

这将打印Cartesian multiplecation of rows.

的所有列

答案 2 :(得分:0)

使用CROSS JOIN(Cartesian Product Join)将解决您的目的。供您参考 没有WHERE子句的交叉连接会生成连接中涉及的表的笛卡尔积。 Cartesian产品结果集的大小是第一个表中的行数乘以第二个表中的行数。

这样就可以了,

SELECT gid, uid
FROM   oc_users CROSS JOIN oc_groups;

始终选择“CROSS JOIN”语法而不是一无所获。由于这是ANSI格式,您可以在数据库中使用它,它在迁移过程中也很有用,因为您不需要在查询中更改任何内容。

希望这可以帮助你!!