warning: Creating default object from empty value in /var/www/drupal-5.23/modules/taxonomy/taxonomy.module on line 1418.

MySQL で、重複レコードを抽出する方法

MySQL (まぁ、単なる SQL)で、データベース中の重複レコードを除いて検索するには distinct を使うのが定石だが、その逆に重複レコードのみ抽出・取得したい場合はどのようにしたらよいのだろう?結論は、以下のようにすればよい。
select * from テーブルA
where 列A in
(select 列A from テーブルA group by 列A
having count(*) > 1);
MySQL (まぁ、単なる SQL)で、データベース中の重複レコードを除いて検索するには distinct を使うのが定石だが、その逆に重複レコードのみ抽出・取得したい場合はどのようにしたらよいのだろう?結論は、以下のようにすればよい。
select * from テーブルA
where 列A in
(select 列A from テーブルA group by 列A
having count(*) > 1);

Perl で、直近の INSERT で生成された ID を得るには?

MySQL を使っていて、auto_increment だったカラムがあるテーブルに INSERT をした場合、このときに生成された ID を取得するには、LAST_INSERT_ID() と書いた SELECT 文を発行する。
@result = $DB->selectrow_array(qq|SELECT LAST_INSERT_ID()|);
$id = $result[0];
MySQL を使っていて、auto_increment だったカラムがあるテーブルに INSERT をした場合、このときに生成された ID を取得するには、LAST_INSERT_ID() と書いた SELECT 文を発行する。
@result = $DB->selectrow_array(qq|SELECT LAST_INSERT_ID()|);
$id = $result[0];

PHP で、直近の INSERT で生成された ID を得るには?

MySQL を使っていて、auto_increment だったカラムがあるテーブルに INSERT をした場合、このときに生成された ID を取得するには、PHP では mysql_insert_id という便利な関数が用意されている。
<?php

// 最初のカラムは auto_increment
$sql = "INSERT INTO `sample` values('', 'test1', 'test2', 'test3')";
mysql_query($sql);
$id = mysql_insert_id();

?>
MySQL を使っていて、auto_increment だったカラムがあるテーブルに INSERT をした場合、このときに生成された ID を取得するには、PHP では mysql_insert_id という便利な関数が用意されている。
<?php

// 最初のカラムは auto_increment
$sql = "INSERT INTO `sample` values('', 'test1', 'test2', 'test3')";
mysql_query($sql);
$id = mysql_insert_id();

?>

Java で、JDBC を使って MySQL にアクセスする方法

Java で MySQL にアクセスするには、MySQL 用の JDBC のドライバが必要である。このドライバは MySQL のサイトから入手できる (MySQL Connector/J とあるので、安定版または最新バージョンをダウンロードする)。 ダウンロードしたものを解凍すると、mysql-connector-java-x.x.xx-bin.jar というファイルがあるはずなので、これを (Linux の場合は) $JAVA_HOME/jre/lib/ext にコピーする。ここに JAR ファイルを置いておく限り、このドライバ (JAR ファイル) に対する CLASSPATH は特に設定する必要はない。 以下はデータベース中の users テーブルから、name と password という 2つのフィールドを読み出す例である (MySQLJDBCTest.java という名前で保存)。
import java.sql.*;

public class MySQLJDBCTest {

    public static void main(String[] args) {

        try {
            // ドライバをロード
            Class.forName("org.gjt.mm.mysql.Driver");

            // データベースへ接続
            String url = "jdbc:mysql:///データベース名?&user=ユーザー名&password=パスワード&"
                       + "useUnicode=true&characterEncoding=UTF-8";
            Connection con = DriverManager.getConnection(url);

            // SQL 文を生成
            Statement s = con.createStatement();
            String sql = "SELECT * FROM `users`";

            // クエリーを実行して結果セットを取得
            ResultSet rs = s.executeQuery(sql);

            // 検索された行数分ループ
            while(rs.next()){
                String name     = rs.getString("name");  // ユーザー名
                String password = rs.getString("pass");  // パスワード

                // 表示
System.out.println(name + " / " + password);
            }

            // データベースから切断
            s.close();
            con.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
コンパイル
# javac MySQLJDBCTest.java
実行
# java MySQLJDBCTest
Java で MySQL にアクセスするには、MySQL 用の JDBC のドライバが必要である。このドライバは MySQL のサイトから入手できる (MySQL Connector/J とあるので、安定版または最新バージョンをダウンロードする)。 ダウンロードしたものを解凍すると、mysql-connector-java-x.x.xx-bin.jar というファイルがあるはずなので、これを (Linux の場合は) $JAVA_HOME/jre/lib/ext にコピーする。ここに JAR ファイルを置いておく限り、このドライバ (JAR ファイル) に対する CLASSPATH は特に設定する必要はない。 以下はデータベース中の users テーブルから、name と password という 2つのフィールドを読み出す例である (MySQLJDBCTest.java という名前で保存)。
import java.sql.*;

public class MySQLJDBCTest {

    public static void main(String[] args) {

        try {
            // ドライバをロード
            Class.forName("org.gjt.mm.mysql.Driver");

            // データベースへ接続
            String url = "jdbc:mysql:///データベース名?&user=ユーザー名&password=パスワード&"
                       + "useUnicode=true&characterEncoding=UTF-8";
            Connection con = DriverManager.getConnection(url);

            // SQL 文を生成
            Statement s = con.createStatement();
            String sql = "SELECT * FROM `users`";

            // クエリーを実行して結果セットを取得
            ResultSet rs = s.executeQuery(sql);

            // 検索された行数分ループ
            while(rs.next()){
                String name     = rs.getString("name");  // ユーザー名
                String password = rs.getString("pass");  // パスワード

                // 表示
System.out.println(name + " / " + password);
            }

            // データベースから切断
            s.close();
            con.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
コンパイル
# javac MySQLJDBCTest.java
実行
# java MySQLJDBCTest