2

1 つの SQL ステートメントを使用して、必要な結果を生成しようとしています。、order、customersという名前の2つのテーブルを取得し、このようなクエリを使用しようとしました

select a.*, b.customers_name 
from order a, customers b 
where a.customers_id=b.customers_id   
order by b.customers_name;

私の問題は、注文テーブルに偽の customers_id があることです。customers_id=0 の場合、customers_name='In House' は cumstomers テーブルに存在しません。この会社に入社する前からこのように使用されていたので、テーブルをまったく変更することはできません。

結果を表示する方法はありますか?すべての注文は、customers_name を持つ order テーブルから注文され、customers_id=0 (<= customers テーブルに一致するレコードがない) の場合、customers_name='In House') および出力は、customers_name で注文する必要があります。

4

5 に答える 5

1

これにはLEFT JOINを使用できるはずです。

select a.*, b.customers_name
from order a
left join customers b
on a.customers_id = b.customers_id
order by b.customers_name;
于 2013-05-15T14:10:00.267 に答える
1
select a.*, IFNULL(b.customers_name, 'In House')
from order a
LEFT JOIN customers b ON a.customers_id=b.customers_id   
order by b.customers_name;

へー、ここでみんな同じ答えになった...

于 2013-05-15T14:10:01.760 に答える
0

1 つのオプション:

select a.*, case when a.customers_id=0 then 'In House' else b.customers_name end as customers_name
from order a
left join customers b on b.customers_id=a.customers_id;

ところで、「結合」構文を使用することをお勧めします。結合条件を「where」句に入れると、読みやすくなります。

于 2013-05-15T14:11:38.050 に答える