sql >> データベース >  >> RDS >> Mysql

セルフジョインを理解する

    自己結合は、同じテーブルの2つ以上のインスタンスが共通のデータ型の列/フィールドを介して結合される内部結合のようなものです。このような結合(内部結合)は、結合条件に基づいて、結果として共通の行を提供します。

    従業員テーブルには3つのレコードが含まれています。この場合、

    従業員としての従業員:

    +-----+---------------+------------+
    | id  | employee      | manager_id |
    +-----+---------------+------------+
    | 1   | Ola           |   NULL     |
    | 2   | Ahmed         |    1       |
    | 3   | Tove          |    1       |
    +----------+----------+------------+
    

    マネージャーとしての従業員:

    +-----+---------------+------------+
    | id  | employee      | manager_id |
    +-----+---------------+------------+
    | 1   | Ola           |   NULL     |
    | 2   | Ahmed         |    1       |
    | 3   | Tove          |    1       |
    +----------+----------+------------+
    

    最初のケース:違いを理解するためにこれを試してみましょう:

    SELECTemp.*manager.* FROM従業員をemp、従業員をmanagerWHERE emp.id =manager.manager_id

    +-----+---------------+------------+-----+---------------+------------+
    | id  | employee      | manager_id | id  | employee      | manager_id |
    +-----+---------------+------------+-----+---------------+------------+
    | 1   | Ola           |   NULL     | 2   | Ahmed         |    1       |
    | 1   | Ola           |   NULL     | 3   | Tove          |    1       |
    +----------+----------+------------+----------+----------+------------+
    

    emp.id=manager.manager_idを参照してください。したがって、NAMEとしてのemp.employeeは最初のテーブルからOlaの行を与え、MANAGERとしてのmanager.employeeは2番目のテーブルからAhmed&Toveの行を与えています。

    2番目のケース:違いを理解するためにこれを試してみましょう:

    SELECTemp.*manager.* FROM従業員を従業員、従業員をマネージャーWHERE manager.id =emp.manager_id

    +-----+---------------+------------+-----+---------------+------------+
    | id  | employee      | manager_id | id  | employee      | manager_id |
    +-----+---------------+------------+-----+---------------+------------+
    | 2   | Ahmed         |    1       | 1   | Ola           |   NULL     |  
    | 3   | Tove          |    1       | 1   | Ola           |   NULL     |
    +----------+----------+------------+----------+----------+------------+
    

    manager.id=emp.manager_idを参照してください。したがって、NAMEとしてのemp.employeeは最初のテーブルからAhmed&Toveの行を与え、MANAGERとしてのmanager.employeeは2番目のテーブルからOlaの行を与えています。



    1. Innodbテーブルの作成時間

    2. SQL-列の最大数を見つける方法は?

    3. MYSQL関数を準備されたPDOステートメントに渡せないのはなぜですか?

    4. SQLデータベースにアラビア文字を挿入する方法は?