MySQL - 使用UNION ALL获取错误的表字段但结果是正确的

时间:2015-09-18 11:33:58

标签: mysql sql union-all

我试图通过匹配电子邮件来查找两个表中的记录。现在结果正确但是得到错误的表字段。

品牌表:

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         *********

结果是正确的但是表格字段是错误的:(任何想法如何解决这个并获得正确的字段。

3 个答案:

答案 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

通过这种方式,您可以获得表的名称,该行的最后一列为该值。