SELECT user_id as user_id, CONCAT(first_name,' ',last_name) as name
FROM users u
WHERE (first_name like '%r%' or last_name like '%r%')
UNION
SELECT provider_id as provider_id, provider_name as name
FROM providers
WHERE ( provider_name like '%r%')
使用上述查询我
user_id name
5 Richard
6 Rowen
12 Riley
21 Rowen providers
Rowen提供程序的provider_id为21.但列名为user_id。如何为provider_id获取不同的列名?
答案 0 :(得分:0)
您可以将列拆分为两个,并在无法获得实际值的地方提供假值:
SELECT '' as provider_id, user_id as user_id, CONCAT(first_name,' ',last_name) as name
FROM users u
WHERE (first_name like '%r%' or last_name like '%r%')
UNION
SELECT provider_id as provider_id, '' as user_id, provider_name as name
FROM providers
WHERE ( provider_name like '%r%')
答案 1 :(得分:0)
由于您正在进行联合,因此第二个查询将从第一个查询继承列名。这导致您的数据在执行后不准确。如果我是你,我会做一个JOIN而不是UNION。这将保留第二个查询的列名称,并以易于阅读的方式显示数据。对于作为提供者的行,用户信息将为NULL,对于作为用户的行,提供者信息将为NULL。我能给你的最好建议是尽可能不在一列中组合两种不同类型的数据。 User_Id和Provider_Id不应位于同一列中,因为它们具有不同的含义。
尝试:
SELECT u.user_id, CONCAT(u.first_name,' ',u.last_name) as user_name,
p.provider_id, p.provider_name
FROM users u, providers p
WHERE (u.first_name like '%r%' or u.last_name like '%r%') or
(p.provider_name like '%r%')