У меня есть две таблицы и одна справочная таблица для запроса. Любое предложение или помощь были бы весьма признательны.
таблица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
Поскольку некоторые достойные профсоюзные запросы уже опубликованы, я немного расскажу о вашем дизайне 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
Итак, вместо того, чтобы ссылаться на ваши имена пользователей повсюду, вы просто присоединяетесь к различным идентификаторам. Немного чище и не хватает дублированных данных, которые у вас были до ИМО. Надеюсь, это поможет...
Можете ли вы попробовать что-то вроде этого
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
Не совсем понятно, чего вы пытаетесь достичь, но вот догадка:
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
Но я бы посмотрел на дизайн БД и подумал о некоторых улучшениях...