2015-03-20 2 views
0

У меня есть таблица с user_id и право, где право может быть полной игрой или демоверсией, поэтому у данного user_id может быть до двух строк, если пользователь играет как полную игру, так и демоверсию.SQL - таблица с двумя одинаковыми именами столбцов

Я сделал соединение, чтобы получить таблицу с двумя столбцами, которая дает мне информацию о том, сыграл ли пользователь, сыгравший полную игру, демо. Первый столбец дает мне все идентификаторы игроков, которые сыграли в полную игру, а второй столбец повторит идентификатор, если игрок сыграл демо, или NULL, если он/она этого не сделал.

select * from 
(
(select e.user_id 
    from table1 e 
    where entitlement = 'fullgame') fg 
left join 
(select e.user_id 
    from table1 e 
    where entitlement = 'demo') demo 
on fg.user_id = demo.user_id 
) 

Моя проблема теперь, когда я пытаюсь соединить эту таблицу с таблицами с другой информацией (возраст, страна), Teradata SQL Assistant дает мне ошибку говоря есть два столбца с одинаковыми именами, т.е. user_id

Как написать мой запрос, чтобы провести различие между двумя столбцами. Должен ли я как-то сначала переименовать один из столбцов?

ответ

0

Вы можете использовать псевдоним, как так:

select * from 
(
(select e.user_id as userid1 
    from table1 e 
    where entitlement = 'fullgame') fg 
left join 
(select e.user_id as userid2 
    from table1 e 
    where entitlement = 'demo') demo 
on fg.userid1 = demo.userid2 
) 

Вы можете использовать as ключевое слово, если вы хотите, или вы можете просто написать это e.user_id userid1, оба означают то же самое.

0

Вы можете псевдоним имя поля как этот

Select e.user_id fullgameuserid 
+1

ах, почему не сделал я думаю об этом, спасибо – APC

0

Хотя вопрос был дан ответ (то есть, использовать as), ваш запрос кажется слишком сложным. Там нет причин, чтобы иметь подзапросы для объединений:

select f.user_id, d.user_id as demo_user_id 
from table1 f left join 
    table1 d 
    on f.user_id = d.user_id and 
     d.entitlement = 'demo' 
where f.entitlement = 'fullgame'; 

Я также считаю, что, имея флаг для второго столбца может лучше соответствует тому, что вы хотите достичь:

select f.user_id, 
     (case when d.user_id is null then 0 else 1 end) as DemoFlag 
Смежные вопросы