2016-06-30 60 views
0

我期待從第一個表中獲取所有值以及第二個表中的連接值。使用唯一值的左連接

表1是fee_category與字段:

id | Category 
1 | A 
2 | B 
3 | C 
4 | D 

表2是fee_charge與字段:

id | std_id | particularID | CategoryID | assign | amount 
1 | 1  | 1   | 1   | 0  | 1000 
2 | 1  | 1   | 2   | 1  | 12000 
3 | 1  | 2   | 3   | 0  | 3000 
4 | 1  | 2   | 4   | 0  | 10 
5 | 2  | 1   | 2   | 0  | 100 
6 | 2  | 2   | 3   | 0  | 120 

基表是 「fee_category」 從我需要的所有值留下 「fee_charge」 加入從哪裏我需要值或NULL爲特定std_id和特定ID

SELECT fee_category.id, fee_category.Category, fee_charge.std_id 
, fee_charge.particularID, fee_charge.CategoryID, fee_charge.assign, fee_charge.amount FROM fee_category 
LEFT join fee_charge on fee_category.id=fee_charge.CategoryID 
where (fee_charge.std_id = 1 OR fee_charge.std_id IS NULL) 
AND (fee_charge.particularID = 1 OR fee_charge.particularID IS NULL) 
group By fee_category.id 
order By fee_charge.assign DESC 

這裏我一個試圖讓std_id的所有類別= 1和particularID = 1

正確的結果應該是

id | Category | std_id | particularID | CategoryID | assign | amount 
1 | A   | 1  | 1   | 1   | 0  | 1000 
1 | B   | 1  | 1   | 2   | 1  | 12000 
1 | C   | 1  | NULL   | NULL  | NULL | NULL 
1 | D   | 1  | NULL   | NULL  | NULL | NULL 

我想上面查詢的各種版本,但沒有得到正確的結果。請幫助

+0

有這裏有一些錯誤。讓我們從GROUP BY開始,它沒有位置在沒有聚合函數的查詢中。 – Strawberry

+0

有沒有sqlfiddle? – Strawberry

+0

下面是這個sqlfiddle:http://sqlfiddle.com/#!9/5ea334/3 – Ash

回答

0
SELECT fee_category.id 
, fee_category.Category 
, X.std_id 
, X.particularID 
, X.CategoryID 
, X.assign 
, X.amount 
FROM fee_category 
LEFT JOIN 
(SELECT * FROM fee_charge 
    WHERE fee_charge.std_id = 1 
    AND fee_charge.particularID = 1) AS X 
    ON x.CategoryID = fee_category.id 
0

這是非常難以遵循,當小提琴不匹配的問題,所以我可能誤解了,但也許你這樣的事情之後是......

SELECT x.id 
    , z.category 
    , x.std_id 
    , y.particularID 
    , y.categoryID 
    , y.assign 
    , y.amount 
    FROM fee_charge x 
    LEFT 
    JOIN fee_charge y 
    ON y.id = x.id 
    AND y.particularID = 1 
    JOIN fee_category z 
    ON z.id = x.categoryID 
WHERE x.std_id = 1;