Нужна помощь с запросом mysql

#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 by

2. @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