我不太喜欢数据库,我有以下问题(我正在使用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
我必须创建一个查询,将这 3 个查询的输出合并到一个输出记录中,如下所示:
field_1.1, field_1.2,...............,field_1.n, my_username, my_password
如您所见,它以查询 1 返回的单个记录的值开头,然后是查询 2 返回的单个值,后跟查询 3 返回的单个值。
如何使用 SQL 执行此类操作?
最简单的方法是在选择查询 1 时使用查询 2 和 3 以及子查询:
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;
如果您更喜欢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"一样进行转义。我还必须为您的原始表字段添加前缀以明确。
请尝试这个...
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