1

oc_users と oc_groups という名前の 2 つのテーブルがあります。以下に示すように、両方のテーブル間に特定の関係はありません。ここでは、各ユーザーを各グループにマップします。

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(Cartesian Product Join)すると目的が解決します。参考までに、WHERE句を持たないクロス結合は、結合に関係するテーブルのデカルト積を生成します。製品結果セットのサイズはCartesian、最初のテーブルの行数に2番目のテーブルの行数を掛けたものです。

簡単に言えば、これで十分です。

SELECT gid, uid
FROM   oc_users CROSS JOIN oc_groups;

何も与えないのではなく、常に「CROSSJOIN」構文を選択してください。これはANSI形式であるため、データベース全体で使用でき、クエリで何も変更する必要がないため、移行中にも役立ちます。

これがお役に立てば幸いです!!

于 2012-12-26T11:21:26.963 に答える
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 に答える