MySQL выбирает результат определенного столбца, замененный результатом другого

#mysql #select

#mysql #выберите

Вопрос:

У меня есть 2 таблицы:

  • Пользователи
  • Задачи

у каждого Task есть столбец с firstname lastname user сохраненным в нем. Однако я не думаю, что это очень хорошее решение. Что, я думаю, было бы намного лучше, так это сохранение id user into Tasks .

Проблема в том, что я могу легко это сделать, но как мне использовать SELECT query?

Мне понадобится какой-то запрос, который будет SELECT содержать все строки, Tasks и когда это будет сделано, выполните последовательность запросов, которые заменяют каждый идентификатор пользователя его / ее именем и фамилией для целей отображения.

Проблема в том, что я понятия не имею, как будет выглядеть этот запрос.

Комментарии:

1. Вам нужно использовать join в вашем запросе.

2. @ChetanRanpariya как бы я использовал такой запрос, если я делаю SELECT * FROM 'Tasks' ?

3. Вам нужно изменить запрос, чтобы выполнить соединение с пользовательской таблицей. Что-то вроде SELECT t.*, CONCAT(u.firstname, ' ', u.lastname) FROM Tasks t JOIN Users u ON t.userid = u.id Я также предлагаю вам прочитать больше о join в MySQL.

4. @ChetanRanpariya Я смог его выполнить, однако то, что он в основном делает, это просто добавляет еще один столбец с результатом CONCAT. Однако, что мне действительно нужно, так это результат t.userid , который нужно заменить на u.id

5. Молодежи нужно выбирать отдельные столбцы таблицы задач и не включать в нее столбец userid. SELECT t.col1,t.col2, t.col3, CONCAT(u.firstname, ' ', u.lastname) as userid .....

Ответ №1:

Вы можете создать представление, определенное так, как вы хотите, затем вы можете выбрать * из представления.

Итак, что-то вроде (stack — это имя моей базы данных)

 create view stack.taskAndUser as
select concat(u.firstName, ' ', u.lastName) as userName, t.*
from stack.user u join stack.task t on t.user = u.id;
 

Затем вы можете выполнить поиск

 select * from stack.taskAndUser;
 

Это будет включать идентификатор пользователя, сохраняемый в task, вы можете изменить свое представление, чтобы опустить его, но вам придется написать более подробный оператор select при создании представления вместо select *.