我试图通过匹配电子邮件来查找两个表中的记录。现在结果正确但是得到错误的表字段。
品牌表:
brand_id business_email password
-------- -------------- --------
2 mack@gmail.com ********
Instagrammer表:
instagrammer_id email password
--------------- ----- --------
1 manan@gmail.com *********
我有这个mysql联合查询:
SELECT brand_id, business_email, password
FROM brand
WHERE business_email = 'manan@gmail.com'
AND STATUS = '1'
UNION ALL
SELECT instagrammer_id, email, password
FROM instagrammer
WHERE email = 'manan@gmail.com'
AND STATUS = '1'
LIMIT 0 , 30
得到这个结果:
brand_id business_email password
-------- -------------- --------
1 manan@gmail.com ********
纠正是:
instagrammer_id email password
--------------- ----- --------
1 manan@gmail.com *********
结果是正确的但是表格字段是错误的:(任何想法如何解决这个并获得正确的字段。
答案 0 :(得分:0)
union
/ union all
查询的列名来自第一个子查询。您可以使用别名来定义它们:
SELECT brand_id as instagrammer_id, business_email as email, password
FROM brand
WHERE business_email = 'manan@gmail.com'
AND STATUS = '1'
UNION ALL
SELECT instagrammer_id, email, password
FROM instagrammer
WHERE email = 'manan@gmail.com'
AND STATUS = '1'
LIMIT 0 , 30
答案 1 :(得分:0)
在第一个SELECT中使用别名:
SELECT brand_id instagrammer_id, business_email email, password
FROM brand
WHERE business_email = 'manan@gmail.com'
AND STATUS = '1'
UNION ALL
SELECT instagrammer_id, email, password
FROM instagrammer
WHERE email = 'manan@gmail.com'
AND STATUS = '1'
LIMIT 0 , 30
答案 2 :(得分:0)
正如我想的那样,如果您的查询只返回一个表中的行,您实际上希望更改列名。但如果从两者返回行怎么办?
我认为实现需求的方法(在单个语句中查询两个表但知道行的来源)是这样的:
SELECT brand_id as table_id, business_email as email, password, 'brand' as sourcetable
FROM brand
WHERE business_email = 'manan@gmail.com'
AND STATUS = '1'
UNION ALL
SELECT instagrammer_id, email, password, 'instagrammer'
FROM instagrammer
WHERE email = 'manan@gmail.com'
AND STATUS = '1'
LIMIT 0 , 30
通过这种方式,您可以获得表的名称,该行的最后一列为该值。