从年份相同的两个表中选择值

时间:2015-03-17 13:27:55

标签: mysql

我从两张年份相同的表格中选择数据。即使table B中的值不匹配,从table c中选择的值也应显示其项目。

table a
|   ItmID   |   NAME    |
|   001     |   book    |       
|   002     |   pencil  |


table b
|   ItmID   |   Amount      |   Year    |
|   001     |   100.00      |   2010    |
|   001     |   150.00      |   2011    |


table c
|   ItmID   |   interest    |   Year    |
|   001     |   10.00       |   2010    |

在上表中,我只想查询2010年该书的金额和利息价值。

expected results
|   NAME    |   Amount  |   interest    |   Year    |
|   book    |   100.00  |   10.00       |   2010    |

这是我到目前为止所尝试的

SELECT  
    a.NAME,
    b.Amount,
    c.interest
FROM
    table a
LEFT JOIN
    table b
ON
    a.ItmID=b.ItmID
LEFT JOIN
    table c
ON
    a.ItmID=c.ItmID
where
    b.year=2010 and c.year=2010

这可以正确地给我值,但是当table c中没有值时,查询将为空。

例如,如果我想查询2011年该书的金额和利息价值。 查询将为空,因为2011年没有利息值。

请问我有什么问题吗?

3 个答案:

答案 0 :(得分:1)

您应该在where子句中添加where条件:

SELECT  
    a.NAME,
    b.Amount,
    c.interest
FROM
    table a
LEFT JOIN
    table b
ON
    a.ItmID=b.ItmID and     b.year=2010 
LEFT JOIN
    table c
ON
    a.ItmID=c.ItmID and c.year=2010

因此,如果您使用where子句,则必须检查c.year是否为空。

答案 1 :(得分:0)

    declare @a table (itemid int,name varchar(10)) 
    insert into @a(itemid,name)values (001,'book')
    insert into @a(itemid,name)values (002,'pencil')

    declare @b table (itemid int,amt money,years varchar(5)) 
    insert into @b(itemid,amt,years)values (001,100.00,2010)
    insert into @b(itemid,amt,years)values (001,150.00,2011)

    declare @c table (itemid int,interest money,years varchar(5)) 
    insert into @c(itemid,interest,years)values (001,10.00,2010)

select distinct top 1 name,amt,interest,c.years from @a a,@b,@c c

答案 2 :(得分:0)

如果你想要tableC的年份与tableB的年份相匹配。不仅仅是专门用于2010年。你还说你想要tableB的所有值,即使tableC没有值。你的左连接将为你做到这一点。

SELECT  
    a.NAME,
    b.Amount,
    c.interest
FROM
    table a
LEFT JOIN
    table b
ON
    a.ItmID=b.ItmID
LEFT JOIN
    table c
ON
    a.ItmID=c.ItmID
    AND
    b.year=c.year