2013-10-27 49 views
0

我看起來像這樣的兩個表:MySQL的JOIN,中頻查詢

SalesPeople 
----------- 
SalesID, FirstName, LastName, Supervisor 

Members 
------- 
MemberID, Firstname, LastName, Region, SalesID 

在試圖展現每一個銷售人員的ID和成員,他們被分配。我寫了下面的SQL查詢:

SELECT s.* 
FROM salespeople s 
INNER JOIN members m ON s.salesid = m.salesid 

然而,如果銷售人員沒有分配給我需要說的任何成員,「沒有成員分配」爲輸出。我也想將MemberID列標記爲'客戶'。

上面的代碼工作,但是當我嘗試標記成員MEMBERID列「客戶」我得到一個錯誤:

SELECT s.* 
FROM salespeople s 
INNER JOIN members m AS Clients ON s.salesid = m.salesid 

同樣,我的問題是:

如何顯示銷售人員的SalesIDMemberID相匹配。如果銷售人員沒有分配給任何成員,則只需顯示它:「沒有成員分配」。如上所述,我需要將顯示MemberID列的列標爲Clients

如果這讓我感到困惑,我很樂意澄清。

+1

查看'left join' – Laurence

+0

左連接與內連接不同,因爲它只會給我們與銷售人員匹配的成員(在本例中)。 – cryptomath

+0

@cryptomath不,「LEFT JOIN」會向您顯示所有銷售人員,而那些在'members'中沒有匹配的人將具有'members'列的NULL值。然後這是一個使用類似於'CASE WHEN Members.MemberID IS NULL THEN'沒有成員分配'ELSE MemberID END AS客戶端' –

回答

2

嘗試了這一點:

SELECT s.*, COALESCE(m.memberId, 'No Members Assigned') clients 
FROM salespeople s 
LEFT JOIN members m ON s.salesid = m.salesid 

LEFT JOIN將讓你m.memberId爲空時,有針對銷售人員沒有成員。

COALESCE函數將返回作爲輸入發送的第一個非空參數。因此,在這種情況下,如果m.memberId爲空,則將返回'No Members Assigned'

將兩者結合起來的結果就是您所期望的結果。

+1

感謝這是正確的 – cryptomath