我从两张年份相同的表格中选择数据。即使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年没有利息值。
请问我有什么问题吗?
答案 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