Как я могу объединить выходные данные (одну запись) этих 3 SQL-запросов в одну выходную запись?

Я не очень разбираюсь в базе данных, и у меня есть следующая проблема (я использую MySql).

Мне нужно объединить вывод 3 запросов в одну запись следующим образом.

У меня есть эти 3 запроса:

ЗАПРОС 1:

select id_1, field_1.1, field_1.2,............., field_1.n where id=1;

Возврат одной записи, содержащей что-то вроде:

field_1.1, field_1.2,...............,field_1.n

ЗАПРОС 2 (используется для получения имени пользователя):

select value from settings where setting_name = 'username';

он всегда будет возвращать одну запись, например:

my_username

3) (используется для получения пароля):

select value from settings where setting_name = 'password';

он всегда будет возвращать одну запись, например:

my_password

Мне нужно создать один запрос, который объединяет выходные данные этих трех запросов в одну выходную запись, что-то вроде этого:

field_1.1, field_1.2,...............,field_1.n, my_username, my_password

Как видите, он начинается со значения одной записи, возвращенной запросом 1, за которым следует единственное значение, возвращенное запросом 2, а затем единственное значение, возвращенное запросом 3.

Как я могу сделать что-то подобное с помощью SQL?


person AndreaNobili    schedule 23.05.2017    source источник
comment
Пожалуйста, не публикуйте один и тот же вопрос(ы) дважды и задавайте только один вопрос на каждый вопрос.   -  person philipxy    schedule 25.05.2017


Ответы (3)


Самый простой способ — использовать запросы 2 и 3 и подзапросы при выборе запроса 1:

select id_1, 
       field_1.1, 
       field_1.2,............., field_1.n,
      (select value from settings where setting_name = 'username') as my_username, --Query2
      (select value from settings where setting_name = 'password') as my_password  --Query3
from  table
where id=1;
person Aaron Dietz    schedule 23.05.2017
comment
что, если подзапрос возвращает более одной записи? - person Rahul; 23.05.2017
comment
@Rahul OP специально говорит, что возвращает одну запись для обоих. - person Aaron Dietz; 23.05.2017
comment
@Рахул это невозможно - person AndreaNobili; 23.05.2017

Если вы предпочитаете синтаксис JOIN, вы можете сделать что-то вроде этого:

select 
  t.id_1, t.field_1.1, t.field_1.2,............., t.field_1.n, 
  s1.`value` as as my_username, 
  s2.`value` as as my_password 
from  table1 t
join settings s1 on (s1.setting_name = 'username')
join settings s2 on (s2.setting_name = 'password')
where t.id=1;

Обратите внимание, что value является зарезервированным ключевым словом, вы должны экранировать его как `value`. Мне также пришлось добавить префикс ваших исходных полей таблицы, чтобы они были явными.

person gaborsch    schedule 23.05.2017

попробуйте это пожалуйста...

select id_1, field_1.1, field_1.2,.., field_1.n, u.username, p.password 
from <table 1>
left join
(select value as username from settings where setting_name = 'username') u
on (1=1)
left join
(select value as password from settings where setting_name = 'password') p
on (1=1)
where id=1
person user2648008    schedule 23.05.2017