簡體   English   中英

存在不匹配的記錄時聯接兩個表

[英]Joining two tables when there is a not matching record exist

我正在嘗試使用1條sql語句來產生所需的結果。 我有2個名為,訂單和客戶的表,並嘗試使用這樣的查詢

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

我的問題是訂單表中有一個偽造的customer_id,如果customers_id = 0,則customers_name =“內部”,該用戶在客戶表中不存在。 在加入這家公司之前,這種方式已經被使用過,所以我根本無法修改表格。

有沒有辦法顯示結果? 帶有“ customers_name”的訂單表中的所有訂單,如果“ customers_id = 0”(<=“ customers表中沒有匹配記錄”),則“ customers_name ='In House')和輸出應該由customers_name進行訂購。

select a.*,
        COALESCE(b.customers_name, 'In House') as customers_name
from
    order a LEFT JOIN customers b ON a.customers_id=b.customers_id
order by
    customers_name;

要么

select a.*,
         CASE
           WHEN a.customers_id = 0 THEN 'In House'
           WHEN b.customers_name IS NULL THEN 'Unknown'
           ELSE b.customers_name
         END as customers_name
from
    order a LEFT JOIN customers b ON a.customers_id=b.customers_id
order by
    customers_name;

無論哪種方式,都可以使用顯式JOIN來保持清晰。

第一個為所有丟失的客戶添加“內部”,第二個通過在customerid不為0時添加“未知”來處理丟失的客戶

您應該可以為此使用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;
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;

嘿,我們在這里都得到了相同的答案...

一種選擇:

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;

順便說一句,我建議您使用“ join”語法。 將您的加入條件放在“ where”子句中,閱讀起來要容易得多。

這種方法使用UNION在查詢過程中添加“ customer 0”行,然后執行INNER JOIN 僅當LEFT JOIN不起作用時才使用它。 您的order表顯然與customers沒有外鍵關系(否則您將無法擁有customer_id0 ),因此LEFT JOIN可能會撿到一些垃圾; 您必須要對此做出判斷。

select a.*, b.customers_name
from order a
INNER JOIN (
  SELECT customers_id, customers_name
  FROM customers
  UNION SELECT 0, 'In House') b ON a.customers_id=b.customers_id
order by b.customers_name;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM