2014-12-28 6 views
2

У меня проблема с запросом mysql.SQL INSERT WITH JOIN

Это мои 2 таблицы:

player_locations:

ID | playerid | type | location 
---|----------------------- 

и users:

ID | playername | [..] 
----|-------------------- 
1 | example1 | ... 

Я хочу, чтобы вставить в player_locations следующее:

ID | playerid | type | location 
---|----------------------- 
1 |  1  | 5 | DOWNTOWN 

И вот мой вопрос:

INSERT INTO player_locations (id, type, location) 
    SELECT u1.ID as playerid, 
     d.type, 
     d2.location 
    FROM users u1 
    INNER JOIN users u2 
    ON 1 = 1 
    INNER JOIN (SELECT 5 as type 
     FROM DUAL) d 
    INNER JOIN (SELECT "DOWNTOWN" as location 
     FROM DUAL) d2 
    ON 1 = 1 
    WHERE u1.playername = "example1"; 

Но когда у меня есть 6 строк в users вставляет 6 одинаковых строки в player_locations

+0

Что касается вашего вопроса к 'java' (тег удален)? – Pshemo

+0

Я буду использовать запрос в java. Я думал, что должен упомянуть об этом. – magl1te

ответ

0

Почему бы просто не написать это?

INSERT INTO player_locations(id, type, location) 
    SELECT u.ID as playerid, 5 as type, 'DOWNTOWN' as location 
    FROM users u 
    WHERE u.playername = 'example1'; 

Самообслуживание не имеет никакого смысла. Вы не используете никакую информацию от u2 в своем запросе, поэтому она просто умножает количество строк. Дополнительные объединения для констант не нужны.

+0

Вот и все. Благодаря! – magl1te

0

Возьмите ИНЕК из, положить ваш выбор внутри() на вставке и который должен сделать это за вас.

+0

Мне нужно предложение WHERE, потому что мне нужно получить идентификатор игрового имени в предложении WHERE – magl1te

+0

Разве ID не потребляется в начале инструкции select? Если вы хотите, чтобы он получил идентификатор из всех строк в [user], вам нужно будет удалить его, если вы его не сделаете, он заполнит [player_location] единственным результатом, который возвращает элемент. – user2975403