SQL вставить несколько строк с внутренним выбором - PullRequest
0 голосов
/ 07 января 2012

Мне нужно вставить несколько строк, но некоторые данные должны исходить из внутреннего выбора, у меня возникла проблема с построением правильного оператора SQL, например, у меня есть:

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

Теперь проблемная часть состоит в том, чтоcreate_to_app_users_id_name и game_users_id_name, которые я могу получить только с помощью select следующим образом:

SELECT app_users_game_users_id_name
FROM `app_users` WHERE app_users_game_users_id = $game_users_id

и

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

как я могу объединить его с одним оператором sql, используя mysql

ОБНОВЛЕНИЕ:
Спасибо всем за ответы, но я думаю, что не объяснил мою проблему правильно ...
Мне нужно вставить несколько строк, что означает, что у меня будет 5-7 game_users_id, и этов конце концов, выглядит как (без выбора здесь ..)

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 );

, где каждая запись значений должна быть составлена ​​из выбора.

Ответы [ 3 ]

0 голосов
/ 07 января 2012

это 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
0 голосов
/ 07 января 2012

Простое SELECT для двух таблиц без JOINs должно сработать (при условии, что каждый оператор select возвращает только одну строку):

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

Еще одно примечание: я предполагаю,Таблица app_users действительно имеет столбец app_users_game_users_id или app_users_created_to_app_users_id.В этом случае вы должны заменить те в SQL реальным именем столбца, которое, как я полагаю, тоже будет user_id, app_user_id или id.Просто ваша модель выглядит очень странно, в противном случае предполагается, что оба вышеупомянутых столбца должны быть уникальными в таблице.

0 голосов
/ 07 января 2012

попробуйте этот код для 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";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...