2015-05-20 93 views
-2

我的查詢低於如何在SQL查詢中使用的情況下

SELECT *, 
CASE WHEN SUBSTRING(controlId,1,1) = 'M' THEN (select fullname from master as controler 
where Regular.controlId = Master.MasterId) 

WHEN SUBSTRING(controlId,1,1) = 'A' THEN (select fullname from Admin as controler 
where Regular.controlId = Master.AdminId) 
END AS controler 
FROM Regular 
INNER JOIN Master ON Regular.ControlId = Master.MasterId 
INNER JOIN Admin ON Regular.ControlId = Admin.AdminId 
Where (Regular.active=0) 

我的表

enter image description here

我的正常數據

enter image description here

我的主表

enter image description here

我的聯繫表中的數據

enter image description here

我想從每一行相關型號表中的全名,但使用上面的代碼它沒有給出任何結果....

+0

可能想嘗試,而不是全稱 –

+0

全名這將有助於看樣主/管理數據對於那些定期記錄。您是否保證每個常規記錄都有主記錄和管理記錄?如果沒有,那麼您是否真的想過濾出在主表和管理表中沒有相應記錄的常規記錄,因爲您當前的查詢正在進行? –

+0

沒有看到所有表格的數據示例,我猜測它與您的連接有關。 – dansasu11

回答

2

這個數據似乎標準化很差,而且也沒有在這個問題足夠的信息知道發生了什麼,但我懷疑你的連接是錯誤的,而且你確實需要使用LEFT連接而不是INNER連接。然後,您可以使用COALESCE()函數代替CASE子句:

SELECT r.*, COALESCE(m.FullName, a.FullName, r.FullName) FullName 
FROM Regular r 
LEFT JOIN Master m ON r.ControlId = m.MasterId 
LEFT JOIN Admin a ON r.ControlId = a.AdminId 
WHERE r.active=0 
+0

我得到了我新的結果,所以請求你不要投我票 –

+0

我沒有downvote這個問題。 –

+0

你不是,但是別人做了兩次 –

1

我不能使用INNER JOIN小號

INNER JOIN Master ON Regular.ControlId = Master.MasterId 
INNER JOIN Admin ON Regular.ControlId = Admin.AdminId 

Regular.ControlId不能存在兩個表中列MasterAdmin

SELECT *, 
CASE WHEN SUBSTRING(controlId,1,1) = 'M' THEN (select fullname from master as controler 
where Regular.controlId = Master.MasterId) 

WHEN SUBSTRING(controlId,1,1) = 'A' THEN (select fullname from Admin as controler 
where Regular.controlId = Master.AdminId) 
END AS controler 
FROM Regular 
Where (Regular.active=0) 
+0

同意,這裏不需要加入。 –

1

也許因爲內部聯接。嘗試改變:

SELECT *, 
    CASE WHEN SUBSTRING(controlId,1,1) = 'M' THEN (select top 1 fullname from Master 
    where Regular.controlId = Master.MasterId) 

    WHEN SUBSTRING(controlId,1,1) = 'A' THEN (select top 1 fullname from Admin 
    where Regular.controlId = Admin.AdminId) 
    END AS controler 
    FROM Regular 
    Where (Regular.active=0) 
+0

沒有內部加入它給錯誤... 子查詢返回超過1個值。當子查詢遵循=,!=,<, <= , >,> =或當子查詢用作表達式時,這是不允許的。 –

相關問題