對不起,關於複雜的標題。左連接,返回不匹配的行,右表中的where子句,由
我有兩個表,客戶和訂單:
客戶 - 名稱可能被複制,ID是唯一的:
name | cid
a | 1
a | 2
b | 3
b | 4
c | 5
訂單 - PID是獨一無二的,參加在CID:
pid | cid | date
1 | 1 | 01/01/2012
2 | 1 | 01/01/2012
3 | 2 | 01/01/2012
4 | 3 | 01/01/2012
5 | 3 | 01/01/2012
6 | 3 | 01/01/2012
所以我用這個代碼得到一個計數:
select customers.name, orders.date, count(*) as count
from customers
left JOIN orders ON customers.cid = orders.cid
where date between '01/01/2012' and '02/02/2012'
group by name,date
工作正常,但沒有給我空行,當客戶的cid在訂單中沒有匹配cid時,例如, name-c,id-5
select customers.name, orders.date, count(*) as count
from customers
left JOIN orders ON customers.cid = orders.cid
AND date between '01/01/2012' and '02/02/2012'
group by name,date
因此,我改變了應用於連接的位置,它工作正常,它給了我空行。 因此,在這個例子中,我會得到:
name | date | count
a | 01/01/2012 | 3
b | null | 1
b | 01/01/2012 | 3
c | null | 1
但因爲名字有不同的CID的它給我即使名稱本身確實有訂單行,我不想空行。
所以我正在尋找空行的方式,只有當任何其他共享相同名稱的cid的訂單中沒有任何行時才返回。
感謝您的任何幫助。
---編輯---
我已編輯計數空行,計數永遠不會返回空但1
的
select * from (select customers.name, orders.date, count(*) as count
from customers
left JOIN orders ON customers.cid = orders.cid
AND date between '01/01/2012' and '02/02/2012'
group by name,date) as t1 group by name
結果是
name | date | count
a | 01/01/2012 | 3
b | null | 1
c | null | 1
我能想到的最簡單的辦法是把你的查詢到一個子查詢組按名稱查詢 – knittl
@ knittl我試過 select * from(select customers.name,orders.date,count(*)as count from customers left JOIN orders on customers.cid = orders.cid AND date between' 01/01/2012'和'02/02/2012' 組名稱,日期)作爲t1組的名稱 但它只是將所有內容合併到它的第一個約會中,你的意思是別的嗎? – mrmryb
這就是我的意思,但你是對的,它沒有按預期工作。 – knittl