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

列を 2 つに分割し、実際の値を取得できない場所に偽の値を指定できます。

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

ユニオンを実行しているため、2 番目のクエリは最初のクエリから列名を継承しています。これにより、実行後にデータが不正確になります。私があなたなら、UNION の代わりに JOIN を実行します。これにより、2 番目のクエリの列名が保持され、読みやすい方法でデータが表示されます。プロバイダーである行の場合、ユーザー情報は NULL になり、ユーザーである行の場合、プロバイダー情報は NULL になります。できる限り、1 つの列に 2 つの異なる種類のデータを組み合わせないようにすることをお勧めします。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 に答える