在单个select语句中连接多个表

在单个select语句中连接多个表,select,union,Select,Union,使用上面的查询,我得到 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

使用上面的查询,我得到

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%')

Rowen providers的提供者id为21。但是列名是user\u id。如何为provider\u id获取不同的列名?

您可以将列一分为二,并在无法获取实际值的情况下提供假值:

user_id name
5        Richard
6        Rowen
12       Riley
21       Rowen providers

因为您正在执行联合,所以第二个查询将从第一个查询继承列名。这会导致执行后数据不准确。如果我是你,我会加入而不是加入工会。这将保留第二个查询的列名,并以易于读取的方式显示数据。对于作为提供者的行,用户信息将为NULL,对于作为用户的行,提供者信息将为NULL。我能给你的最好建议是尽可能不要将两种不同类型的数据合并到一列中。用户Id和提供者Id不应在同一列中,因为它们具有不同的含义

尝试:

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%')
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%')