2016-11-27 4 views
1

Я хочу знать, как заменить иностранное значение на значение первичного ключа, когда оба столбца одного типа.Замена внешнего ключа первичным ключом

Table1: Пользователи: user_iduser_name

TABLE2: Читатели: user_namefollowed_user_name

(Предположим, что имена уникальны)

Я хочу, чтобы создать запрос, чтобы получить то же самое, Таблица 2, но изменяя каждый user_name на id и follower_user_name от id. Я запутался, потому что оба они одного типа.

То, что я до сих пор:

SELECT 
    table1.user_id, 
    table2.follower_user_name #This needs to be replaced 
FROM table2 
INNER JOIN table1 
    ON table2.user_name = table1.user_name 

PS: это база данных Я работаю с, я не проектировал его. Не знаете, почему они просто не использовали идентификаторы вместо этого в таблице последователей.

ответ

1

Вы можете присоединиться к followers на usersдважды один раз для имени пользователя и один раз для имени последовавшего пользователя:

SELECT u1.id, u2.id 
FROM followers f 
JOIN users u1 ON u1.user_name = f.user_name 
JOIN users u2 ON u2.user_name = f.followed_user_name 
+0

Я бы настоятельно советовал не полагаться на порядок слева направо, чтобы дать смысл. Также вы переименовали имена таблиц OP (может быть, это хорошо). – onedaywhen

+0

@onedaywhen Это имена, указанные в тексте вопроса, хотя фрагмент фрагмента программы OP не соответствует тексту, который предшествует ему. – Mureinik

1

Я считаю принятый ответ немного странным: результат с двумя атрибутами то же имя?! Излишне говорить, что такой результат носит нерелятивный характер.

Если вы согласны, что мы должны использовать rename оператор отношения (так называемый AS в SQL), то мы можем нажать на операцию в табличном выражении, что позволит использовать NATRUAL JOIN, который держит нас relationlanders счастливым:

SELECT user_id, follower_user_id 
    FROM table2 
     NATURAL JOIN table1 
     NATURAL JOIN 
     (SELECT user_id AS follower_user_id, 
       username AS follower_user_name 
      FROM table1) f; 
Смежные вопросы