Mysql: объединение нескольких предложений where из одной таблицы с именами столбцов diff

Я новичок в MySQL и учусь через PluralSight. Я пытаюсь выполнить запрос с результатом 4 столбца. 3 из 4 столбцов происходят из одного и того же столбца, но отличаются предложением WHERE, направленным на числовое значение. Кроме того, я добавляю столбец из другой таблицы. Мне кажется, исправить это очень просто, но, как я уже сказал, я новичок в этом. По отдельности разделы работают отлично, но я не знаю, как правильно их соединить. Любая помощь будет оценена по достоинству. Моя работа на данный момент представлена ​​ниже.

Select answer as FirstName
FROM glpi.glpi_plugin_formcreator_answers
WHERE plugin_formcreator_questions_id = 1

Select answer as MI
FROM glpi.glpi_plugin_formcreator_answers
WHERE plugin_formcreator_questions_id = 54 

Select answer as LastName
FROM glpi.glpi_plugin_formcreator_answers
WHERE plugin_formcreator_questions_id = 55

Select request_date
FROM glpi.glpi_plugin_formcreator_forms_answers

Я думаю, вам нужно получить 4 столбца в конце. Как вы определите, какой FirstName соответствует любому LastName? То есть, у вас должно быть какое-то другое поле, подозреваю что-то вроде FormId или что-то еще, а то нет смысла

Alex 10.08.2018 15:04

Это справедливый момент. Человек, отвечающий за базу данных, отсутствует, и у меня нет идентификаторов столбцов, поэтому я работаю вслепую.

Cilly C 10.08.2018 15:10
0
2
41
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Обычно мы используем union, когда у нас есть несколько предложений where. Вы можете использовать предложение UNION.

Select answer as FirstName FROM glpi.glpi_plugin_formcreator_answers WHERE plugin_formcreator_questions_id = 1 UNION Select answer as MI FROM glpi.glpi_plugin_formcreator_answers WHERE plugin_formcreator_questions_id = 54 UNION Select answer as LastName FROM glpi.glpi_plugin_formcreator_answers WHERE plugin_formcreator_questions_id = 55 UNION Select request_date FROM glpi.glpi_plugin_formcreator_forms_answers

Моей первой мыслью было использовать UNION, однако он превратился в мега-колонку. : / Есть ли у вас источники, которые могут немного лучше объяснить UNION?

Cilly C 10.08.2018 15:06

Попробуй это:

Select case when plugin_formcreator_questions_id=1 then answer end as FirstName,
case when plugin_formcreator_questions_id=54 then answer end as MI,
case when plugin_formcreator_questions_id=55 then answer end as LastName
FROM glpi.glpi_plugin_formcreator_answers

Это помогло мне получить несколько столбцов! Спасибо. Как мне включить последний раздел: выберите request_date ОТ glpi.glpi_plugin_formcreator_forms_answers

Cilly C 10.08.2018 15:08

к какой таблице вы хотите присоединиться? и если ответы сработали для вас, пожалуйста, примите мой ответ

Fahmi 10.08.2018 15:13

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

Fahmi 10.08.2018 15:14

Таблица, которую я хочу создать, будет объединять ответы из формы для автоматизации создания учетной записи пользователя. ID 1 - это имя, ID 54 - среднее начальное, ID 55 - это фамилия, а четвертый столбец - для даты, запрошенной из формы.

Cilly C 10.08.2018 15:17
Ответ принят как подходящий

Это не ответ

Поскольку я подозреваю, что вы упускаете что-то важное в своих требованиях

Я просто хочу представить вам подход к тому, что вы хотите получить, единственное, чего вам не хватает, - это столбец GROUP BY.

SELECT
   IF(plugin_formcreator_questions_id = 1,answer, null) as FirstName
   IF(plugin_formcreator_questions_id = 54,answer, null) as MI,
   IF(plugin_formcreator_questions_id = 55,answer, null) as LastName,
   request_date
FROM glpi.glpi_plugin_formcreator_answers
WHERE plugin_formcreator_questions_id IN (1,54,55)

Итак, окончательная версия должна быть примерно такой:

SELECT
   form_id,
   MAX(IF(plugin_formcreator_questions_id = 1,answer, null)) as FirstName
   MAX(IF(plugin_formcreator_questions_id = 54,answer, null)) as MI,
   MAX(IF(plugin_formcreator_questions_id = 55,answer, null)) as LastName,
   MAX(request_date)
FROM glpi.glpi_plugin_formcreator_answers
WHERE plugin_formcreator_questions_id IN (1,54,55)
GROUP BY form_id

Я считаю, что это также поможет мне, так как я считаю, что в базе данных отсутствует часть информации. Спасибо за помощь!

Cilly C 10.08.2018 15:18

Есть ли у вас предложение для включения: Выберите request_date ИЗ glpi.glpi_plugin_formcreator_forms_answers ГДЕ plugin_formcreator_forms_answers_id = glpi_plugin_formcreator_forms_answers.id

Cilly C 10.08.2018 20:10

@CillyC просто замените form_id в моем запросе на id в обоих случаях, когда SELECT и когда GROUP BY, я думаю

Alex 10.08.2018 20:30

Другие вопросы по теме