简体   繁体   中英

sql insert multiple rows with inner selects

I need to insert multiple rows , but some of the data have to come from inner select i having problem to construct the right sql statement for example i have :

insert into game_friends(
game_users_id,
game_users_id_name,
created_to_app_users_id,
created_to_app_users_id_name
) VALUES  ......

now the problematic part is that the created_to_app_users_id_name and game_users_id_name i can get only by using select like this:

SELECT app_users_game_users_id_name
FROM `app_users` WHERE app_users_game_users_id = $game_users_id

and

SELECT app_users_created_to_app_users_id_name  
FROM `app_users` 
WHERE app_users_created_to_app_users_id = $created_to_app_users_id

how can i combine it to one sql statement using mysql

UPDATE:
Thanks to all for answering , but i guess didnt explain my problem right ...
i need to insert multiple rows that means i will have like 5-7 game_users_id coming and it needs in the end look like ( with out the select here .. )

insert into game_friends(
    game_users_id,
    game_users_id_name,
    created_to_app_users_id,
    created_to_app_users_id_name
    )  
VALUES
  ($game_users_id, app_users_created_to_app_users_id_name, $created_to_app_users_id,app_users_created_to_app_users_id_name ),
  ($game_users_id, app_users_created_to_app_users_id_name, $created_to_app_users_id,app_users_created_to_app_users_id_name ),
  ($game_users_id, app_users_created_to_app_users_id_name, $created_to_app_users_id,app_users_created_to_app_users_id_name ),
  ($game_users_id, app_users_created_to_app_users_id_name, $created_to_app_users_id,app_users_created_to_app_users_id_name );

where each Values entry need to be composed from select.

try this code for PHP:

$query = "insert into game_friends(
 game_users_id,
 game_users_id_name,
 created_to_app_users_id,
 created_to_app_users_id_name
) SELECT
 app_users_game_users_id,
 app_users_game_users_id_name,
 app_users_created_to_app_users_id,
 app_users_created_to_app_users_id_name
FROM `app_users` WHERE
app_users_game_users_id = $game_users_id
AND
app_users_created_to_app_users_id = $created_to_app_users_id";

this is UNTESTED .

insert into game_friends
(
    game_users_id,
    game_users_id_name,
    created_to_app_users_id,
    created_to_app_users_id_name
) 
VALUES
SELECT  game_users_id, 
        created_to_app_users_id, 
        FinalTable.game_users_id_name,
        FinalTable.created_to_app_users_id_name
FROM
    ((SELECT app_users_game_users_id as game_users_id,
           app_users_game_users_id_name as game_users_id_name
    FROM   app_users
    WHERE  app_users_game_users_id = game_users_id) as iGameID
        INNER JOIN
    (SELECT app_users_created_to_app_users_id as created_to_app_users_id,
           app_users_created_to_app_users_id_name as created_to_app_users_id_name
    FROM   app_users
    WHERE  app_users_created_to_app_users_id = created_to_app_users_id) as iCreatedID
        ON iGameID.game_users_id = iCreatedID.created_to_app_users_id)  as FinalTable

Simple SELECT over two tables without any JOINs should do the trick (assuming each select statement returns only one row):

INSERT INTO game_friends (
    game_users_id,
    game_users_id_name,
    created_to_app_users_id,
    created_to_app_users_id_name
)

SELECT  u_game.app_users_game_users_id,
        u_game.app_users_game_users_id_name,
        u_created.app_users_created_to_app_users_id,
        u_created.app_users_created_to_app_users_id_name
FROM    `app_users` u_game,
        `app_users` u_created
WHERE   u_game.app_users_game_users_id = $game_users_id
    AND u_created.app_users_created_to_app_users_id = $created_to_app_users_id

Another note: I am guessing that you app_users table does really have a column app_users_game_users_id or app_users_created_to_app_users_id . In which case you should replace those in the SQL with the real column name, which again I guess is either user_id , app_user_id or id . It is just that your model looks very strange otherwise assuming that both of the above mentioned columns are supposed to be unique in the table.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM