3

DBからすべての重複行を取得しようとしています。entriesと呼ばれる主キーidantVARCHAR列を持つテーブルがあるとしましょうname。私はすでにSQLクエリを実行しています:

SELECT id, entries.name FROM entries 
INNER JOIN 
    (SELECT name FROM entries 
     GROUP BY name 
     HAVING count(id) > 1) 
duplicate ON entries.name = duplicate.name

個人的な興味と他のコードとの一貫性のために、CodeIgniterDatamapperlibを使用して同様のクエリを作成したいと思います。

サブクエリ部分を作成しましたが、期待どおりに機能しています。

$e = new Entry();
$e->group_by('name')->having('COUNT(id) > 1')->get();

INNER JOIN ... ON ...しかし、サブクエリを親クエリ(一部)に統合する方法がわかりません。

4

1 に答える 1

2

まず、内部結合を行う必要はありません。

SELECT id、entries.name FROM エントリー GROUP BY name HAVING count(id) > 1

これにより、重複したレコードが作成されます。したがって、結合されたクエリのデータ マッパーを作成する必要はありません。

これだけで結果が出ます。

$e = 新しいエントリ();

$e->group_by('name')->having('COUNT(id) > 1')->get();

アップデート:

SELECT id、entries.name FROM エントリ where id NOT IN (SELECT id FROM エントリ GROUP BY name HAVING count(id) = 1)

于 2012-02-27T06:50:14.093 に答える