MySQL выбрать в двух таблицах

0

У меня есть две таблицы и одна справочная таблица для запроса. Любое предложение или помощь были бы весьма признательны.

таблица1

user_id   username     firstname     lastname        address
  1       john867      John          Smith          caloocan
  2       bill96       Bill          Jones          manila

таблица2

user_name_id   username       firstname      lastname        address       designation
  1             jakelucas     Jake           Lucas           caloocan        employee
  2             jadejones     Jade           Jones           Quezon          student
  3             bong098       Bong           Johnson         pasig           employee

справочная таблица

ref_id   username      friend_username
  1      tirso         bill96
  2      tirso         jadejones
  2      tirso         bong098

вывод должен понравиться

user_id    user_name_id      username       firstname      lastname        address       designation
  2                          bill96          Bill           Jones           manila
             2               jadejones       Jade           Jones           Quezon          student
             3               bong098         Bong           Johnson         pasig           employee
Теги:

3 ответа

1
Лучший ответ

Поскольку некоторые достойные профсоюзные запросы уже опубликованы, я немного расскажу о вашем дизайне db.

Я определенно возьму то, что IronGoofy сказал серьезно, прежде чем занять слишком много времени, пытаясь объединить эти таблицы вместе. Кажется, что у вас много дублированных данных для управления вашими таблицами, и это может выйти из-под контроля довольно быстро, если это увеличится.

Я думаю, вам, вероятно, следует попытаться отделить ваши данные, чтобы важную информацию можно было связать с user_id.

Итак, например, у вас может быть несколько таблиц здесь...

User Information Table:
---------
User_id
Username
First Name
Last Name
Address
Designation_id

Friend Link Table:
---------
Friend_link_id
User_id     
Friend_user_id   

Designation Table:
---------
Designation_id
Designation_name

Итак, вместо того, чтобы ссылаться на ваши имена пользователей повсюду, вы просто присоединяетесь к различным идентификаторам. Немного чище и не хватает дублированных данных, которые у вас были до ИМО. Надеюсь, это поможет...

  • 0
    +1 за просмотр дизайна, а не запроса
1

Можете ли вы попробовать что-то вроде этого

SELECT  [table1].[USER_ID],
        NULL user_name_id,
        [table1].username,
        [table1].firstname,
        [table1].lastname,
        [table1].address,
        NULL designation
FROM    reference_table INNER JOIN
        table1 ON [reference_table].friend_username = [table1].username
UNION 
SELECT  NULL USER_ID,
        [table2].user_name_id,
        [table2].username,
        [table2].firstname,
        [table2].lastname,
        [table2].address,
        [table2].designation
FROM    reference_table INNER JOIN
        table2 ON [reference_table].friend_username = [table2].username
0

Не совсем понятно, чего вы пытаетесь достичь, но вот догадка:

SELECT user_id, NULL as user_name_id, username, ...
FROM ref_tab r join table1 t1 on r.friend_username = t1.username
WHERE r.ref_id = 1
UNION 
SELECT NULL as user_id, user_name_id, username, ...
FROM ref_tab r join table1 t2 on r.friend_username = t2.username
WHERE r.ref_id = 2

Но я бы посмотрел на дизайн БД и подумал о некоторых улучшениях...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню