1

我有两个名为 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           |    
+---------+-----------------+
4

3 回答 3

0

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

SELECT gid, uid
FROM   oc_users CROSS JOIN oc_groups
ORDER BY gid, uid
于 2012-12-26T11:01:27.603 回答
0

用这个

select * from oc_user , oc_groups ORDER BY gid, uidS

这将打印所有列Cartesian multiplecation of rows.

于 2012-12-26T11:08:30.740 回答
0

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

所以简单地说,

SELECT gid, uid
FROM   oc_users CROSS JOIN oc_groups;

始终使用“CROSS JOIN”语法,而不是什么都不做。由于这是 ANSI 格式,您可以在数据库中使用它,并且在迁移过程中也很有用,因为您不需要更改查询中的任何内容。

希望这对你有帮助!!

于 2012-12-26T11:21:26.963 回答