レコード操作ー取得


重複なしで取得する(DISTINCT)

SELECT DISTINCT field1 FROM テーブル名;
// 例えば以下のようなデータあるとする
+----+-------+---------------------+
| id | name  | date                |
+----+-------+---------------------+
|  1 | test1 | 2016-04-01 00:00:00 |
|  2 | test2 | 2016-04-01 00:00:00 |
|  3 | test1 | 2016-04-01 00:00:00 |
|  4 | test2 | 2016-07-21 15:15:12 |
|  5 | test1 | 2016-09-18 10:22:14 |
+----+-------+---------------------+

// nameを重複無しで取得すると
SELECT DISTINCT name FROM Sample;
+-------+
| name  |
+-------+
| test1 |
| test2 |
+-------+

// 複数のフィールドを取得しようとすると完全にフィールドが一致した場合のみ重複とみなされる
SELECT DISTINCT name, date FROM Sample;
+-------+---------------------+
| name  | date                |
+-------+---------------------+
| test1 | 2016-04-01 00:00:00 |
| test2 | 2016-04-01 00:00:00 |
| test2 | 2016-07-21 15:15:12 |
| test1 | 2016-09-18 10:22:14 |
+-------+---------------------+

1つのレコードで同じテーブルに対して複数キーを参照したい場合

1つのレコードに同じテーブルを参照する複数のキーがある場合について。
下記の例はテーブルAのレコードを取得するときテーブルBのfruits_idからnameを参照しようとする場合の方法です。
ポイントはJOINするときのテーブル名を変更してあげるところです。

SELECT id, fruits_id1, tbl1.name AS name1, fruits_id2, tbl2.name2 
FROM テーブルA
JOIN テーブルB AS tbl1 ON テーブルA.fruits_id1=tbl1.fruits_id 
JOIN テーブルB AS tbl2 ON テーブルA.fruits_id2=tbl2.fruits_id 

テーブルA
+----+------------+------------+
| id | fruits_id1 | fruits_id2 |
+----+------------+------------+
|  1 |          1 |          2 |
|  2 |          3 |          4 |
|  3 |          5 |          6 |
|  4 |          2 |          5 |
|  5 |          4 |          1 |
+----+------------+------------+

テーブルB
+-----------+------------+
| fruits_id |       name |
+-----------+------------+
|         1 |      apple |
|         2 |     orange |
|         3 |      lemon |
|         4 | strawberry |
|         5 |      grape |
|         6 |      mango |
+-----------+------------+