2012-07-18 112 views
1

是否可以像這樣查詢'OR'函數。查詢兩個相同的列

更新例如:

Select S.*, U.* from Staff S, Unit U where S.Unit='' OR S.Unit= U.UnitCode; 

職員表模式:

Staff ID, Staff Name, UnitCode, StaffNumber 

單位架構:

UnitCode, ClassCode 

上述更新示例工作。但單位爲空的工作人員記錄將與所有單位代碼重複。

例如結果輸出:

Staff ID  Staff Name  UnitCode  ClassCode Staff Number 
1   John   IT1   B123   234 
2   Sally   BUS2  B234   0589 
3   Johnson   IT1   B123   111 
4   Johnson   BUS2  B234   111 

感謝

+0

你的意思是「單位爲空或單位與員工匹配」? – Boomer 2012-07-18 06:46:52

回答

2

既然你使用SQLite,使用OR代替||

Select S.*, U.* 
from Staff S, Unit U 
where S.Unit = '' OR S.Unit= U.UnitCode; 

結果是什麼,如果我去掉這個條件? S.Unit = ''

Select S.*, U.* 
from Staff S INNER JOIN Unit U 
     on S.Unit = U.UnitCode; 

更新1

你可以試試這個嗎?

SELECT x.* 
FROM Staff x INNER JOIN 
    (Select DISTINCT S.StaffID 
    from Staff S INNER JOIN Unit U 
      on (S.Unit = U.UnitCode) OR 
       (S.Unit = '') 
    ) y ON x.StaffID = y.StaffID 
+0

@toteski,如果我這樣做,空記錄將與所有單位名稱等重複。我該如何解決它? – JLearner 2012-07-18 06:59:39

+0

我可以幫助你更多,如果你可以發佈架構甚至一些虛擬記錄,所以我可以告訴爲什麼結果中有重複的記錄:) – Ambrose 2012-07-18 07:02:08

+0

編輯我的問題上面。我認爲這是由於我的U. * – JLearner 2012-07-18 07:05:30

1

是你可以使用OR代替||

1
Select S.*, U.* from Staff S, Unit U where S.Unit='' OR S.Unit IS null OR S.Unit= U.UnitCode; 

編輯:

SELECT 
CASE WHEN S.Unit='' THEN S.Unit END AS blankOne, 
CASE WHEN S.Unit= U.UnitCode THEN S.Unit END AS MatchOne 
FROM Staff S, Unit U 
WHERE S.Unit= U.UnitCode 
+0

嗨,很好,有一個空白。但是當我執行這個聲明時,空白記錄將被複制到所有員工沒有 – JLearner 2012-07-18 06:56:23

+0

無需選擇*?它不起作用。崩潰我的sqlite – JLearner 2012-07-18 07:09:52

1

我認爲你是left join後:

Select S.*, U.* 
    from Staff S 
    left join Unit U 
    on S.Unit= U.UnitCode 

這將檢索所有工作人員記錄和匹配的記錄,從單位,如果存在的話。如果不是該單元的所有列都是空的。

相關問題