2017-02-17 55 views
2

我有2個表格。從一個表格中選擇所有記錄,並在其他表格中顯示該記錄是否在另一個表格中找到

用戶:

ID  CUSTOMID  NAME 
1  X543   John 
2  X354   Jane 
3  X389   Jack 
4  X123   James 

列表:

ID  CUSTOMID  NAME  ADDRESS 
1  X543   John  address1 
2  X543   John  address2 
3  X543   John  address3 
4  X543   John  address4 
5  X543   John  address5 
6  X354   Jane  address1 
7  X354   Jane  address2 
8  X354   Jane  address3 
9  X389   Jack  address1 
10  X389   Jack  address2 
11  X389   Jack  address3 
12  X389   Jack  address4 
13  X389   Jack  address5 
14  X389   Jack  address6 

我需要以下結果:

ID  CUSTOMID  NAME  MATCHED 
1  X543   John  1 
2  X354   Jane  1 
3  X389   Jack  1 
4  X123   James 0 

如果在列表中的表中的自訂那麼我需要標識添加到用戶表。以下是我試過到目前爲止:

SELECT users.*, if(list.CUSTOMID IS NULL, FALSE, TRUE) AS matched from users LEFT JOIN list ON (users.CUSTOMID=list.CUSTOMID) 

但我得到了很多重複的,因爲有到列表中的多條記錄與相同的自訂。

回答

1

您可以使用CASE和EXISTS

Select u.*, 
    case when exists (
    select 1 from list l where u.customid =l.customid 
) then 1 else 0 end matched 
From users u; 
+0

完美地工作!謝謝! –

-1

我認爲你可以使用GROUP_ BY語句,所以您不必重複,你應該在兩個表中進行的自訂組。 但是,您也可以在select語句(屬性customID之前)中使用關鍵字DISTINCT,DISTINCT不如GROUP_BY更有效。

1

修改現有查詢也非常小......

SELECT DISTINCT u.* 
       , COALESCE(l.CUSTOMID IS NOT NULL,0) matched 
      FROM users u 
      LEFT 
      JOIN list l 
      ON l.CUSTOMID = u.CUSTOMID 
+0

感謝您修改它。它可以工作,但需要更長時間才能運行查詢。 –

相關問題