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

MySQLの2つの異なるケースで3つのテーブルをバインドする

    「機関」と「エリア」の2つのテーブルがあります

    「エリア」がそれ自体にリンクできるようにします。つまり、area_id、parent_area_id

    このようにして、常に教育機関をarea_idにリンクすると、内部ロジックによって、その地域が地区と見なされるか都市と見なされるかを判断できます。

    これで

    institutions (
        id UNSIGNED INT NOT NULL PK AI,
        area_id UNSIGNED INT NOT NULL,
        name VARCHAR NOT NULL
    )
    

    および

    areas (
        id UNSIGNED INT NOT NULL PK AI,
        parent_area_id UNSIGNED INT NOT NULL DEFAULT 0,
        name VARCHAR NOT NULL,
        type ENUM('city','district') NOT NULL DEFAULT 'city' 
    )
    

    area.typeフィールドはオプションですが、そのように定義する場合は、データベース内でそれを行う方法になる可能性があります(そうでない場合は、parent_area_id =0の場合は都市、それ以外の場合は地区であると想定します)

    >

    このようにフィールドを選択するとき、あなたがしているのは

    SELECT *
    FROM institutions
    INNER JOIN areas
    ON areas.id = institutions.area_id
    

    機関area_idがリンクしている場所を100%確信できます。地区または都市のテーブルに移動するかどうかに疑問符はありません。間違いなく、地域のテーブルに移動します。このテーブルは、地区と都市を同じように扱い、情報を表示します。フロントエンドが都市または地区として解釈する可能性のある形式。オプションで、本当にやりたい場合はさらに一歩進むことができます

    SELECT
        i.*,
        COALESCE(a_parent.id,a_child.id) AS city_id,
        COALESCE(a_parent.name,a_child.name) AS city_name
    FROM institutions AS i
    INNER JOIN areas AS a_child
    ON a_child.id = i.area_id
    LEFT JOIN areas AS a_parent
    ON a_parent.id = a_child.parent_area_id 
    

    たとえば、教育機関が都市内の特定の地区に関連付けられている場合でも、常に都市名が返されます



    1. 最近挿入されたレコードIDの配列を取得するにはどうすればよいですか?

    2. OBJECTPROPERTY()を使用して、テーブルがSQLServerのシステムテーブルであるかどうかを確認します

    3. Pythonを使用してこのxml/txtファイルからsqliteテーブルを作成するにはどうすればよいですか?

    4. PHPを使用したIN句を使用したMySQLのクエリ