2016-06-30 47 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;