#mysql
#mysql
Вопрос:
У меня есть таблица платежей, которая имеет следующую структуру.
**Payments**
id
name
created_by - user_id
closed_by - user_id
**Users**
user_id
name
surname
Каков наилучший способ показать имя и фамилию пользователя, который создал и закрыл файл оплаты.
Единственный способ, которым, я думаю, это могло бы сработать, — это использовать подзапрос для обоих (полей created_by,closed_by) спасибо
Комментарии:
1. Можете ли вы привести мне пример того,
JOIN
как это выглядело бы
Ответ №1:
Попробуйте это:
SELECT p.id, p.name,
CONCAT (u1.name,' ', u1.surname) created,
CONCAT (u2.name,' ', u2.surname) closed,
FROM payments p INNER JOIN users u1
ON p.created_by = u1.user_id
INNER JOIN users u2
ON p.closed_by = u2.user_id
ОТРЕДАКТИРОВАНО: если вы хотите, чтобы имя и фамилия были разделены
SELECT p.id, p.name,
u1.name created_name, u1.surname created_surname,
u2.name closed_name, u2.surname closed_surname,
FROM payments p INNER JOIN users u1
ON p.created_by = u1.user_id
INNER JOIN users u2
ON p.closed_by = u2.user_id
Комментарии:
1. Я думаю, вы неправильно поняли, что я ведьма created_by и closed_by по сути являются
user_id
, но мне нужны имя и фамилия для полей created_by и closed by2. @Contra: Я дал вам объединенные поля… если вы хотите, чтобы они были разделены, я отредактирую свой пост…
3. Легенда это работает, я буду благодарен, приму stackoverflow позволяет мне (3 минуты)
Ответ №2:
Строгого объединения недостаточно, я думаю, вы можете использовать объединения в предложении where
select name, surname
from
payments p, users u
where
u.user_id = p.created_by
and u.user_id = p.closed_by
Комментарии:
1.
payments
не имеет столбцаuser_id
.2. Я думаю, что это не сработает, если created_by отличается от closed_by. Я ошибаюсь?
3. @Marco насколько я знаю, @Contra пишет «кто создал и закрыл файл оплаты». так что на самом деле это не должно работать
Ответ №3:
Вы можете присоединиться к одной таблице несколько раз, но вам придется использовать псевдоним.
select
p.*,cr.*,cl.*
from
payments p
join users cr
on p.created_by = cr.user_id
join users cl
on p.closed_by = cl.user_id