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

LEFTJOINとINNERJOINを使用して挿入します

    選択する列について具体的にする必要があります。 userの場合 テーブルには4つの列id, name, username, opted_inがありました クエリからこれらの4つの列を正確に選択する必要があります。構文は次のようになります:

    INSERT INTO user (id, name, username, opted_in)
      SELECT id, name, username, opted_in 
      FROM user LEFT JOIN user_permission AS userPerm ON user.id = userPerm.user_id
    

    ただし、user_permissionに参加する理由はないようです。 ここでは、そのテーブルのどの列もuserに挿入されないためです。 。実際、このINSERT 主キーの一意性違反で失敗する可能性があります。

    MySQLは、同時に複数のテーブルへの挿入をサポートしていません。 2つのINSERTを実行する必要があります 最初のクエリの最後の挿入IDを使用してコード内のステートメントを作成するか、AFTER INSERTを作成します プライマリテーブルでトリガーします。

    INSERT INTO user (name, username, email, opted_in) VALUES ('a','b','c',0);
    /* Gets the id of the new row and inserts into the other table */
    INSERT INTO user_permission (user_id, permission_id) VALUES (LAST_INSERT_ID(), 4)
    

    または、トリガー を使用します :

    CREATE TRIGGER creat_perms AFTER INSERT ON `user`
    FOR EACH ROW
    BEGIN
      INSERT INTO user_permission (user_id, permission_id) VALUES (NEW.id, 4)
    END
    


    1. Ubuntuでmysqlサーバーを起動できません

    2. 空のSQLiteデータベースを作成する方法

    3. Postgresql SCRAM認証の問題を解決するにはどうすればよいですか?

    4. T-SQLを使用してSQLServerでユーザー定義のデータ型エイリアスを作成する方法