0
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 的不同列名?

4

2 回答 2

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%')
于 2013-11-03T20:54:45.680 回答
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%')
于 2013-11-03T20:55:32.447 回答