select * from table1 a left join table2 b on a.id=b.id--联查需要条件的。
CREATE TABLE #temp ( id INT, [money] INT ) INSERT #temp SELECT 1, 10 CREATE TABLE #temp2 ( id INT ) INSERT #temp2 SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 2 GO --SQL: SELECT SUM([money]) FROM #tempSELECT SUM(a.[money]) FROM #temp a LEFT JOIN #temp2 b ON a.id = b.id --注意:如果b表有多条记录对应a表,就会发生你据说的那种情况.
肯定不一样了,第二种查询方法是左外联接,以table1的字段去匹配table2的字段。
一对多关系 from table1 行数跟 from table1 as a left join table2 as b 取出来的行数 是不一样的,当然 sum 起来就不一样
楼上说的都对,一对多的化,在第二句 select sum(a.money) from table1 as a left join table2 as b 相当于原先table1一条记录的a.money对应table2多个, 也就是同一个table1.money可能出现多次,那么相加后的值肯定大于第一种的sum, 所以第二种是错的,要和第一种机同的化,必须使table2和table1是一对一的对应, 如table2先group by 那个连接条件的字段后,再与table1对应
(
id INT,
[money] INT
)
INSERT #temp
SELECT 1, 10
CREATE TABLE #temp2
(
id INT
)
INSERT #temp2
SELECT 1 UNION ALL
SELECT 1 UNION ALL
SELECT 2
GO
--SQL:
SELECT SUM([money]) FROM #tempSELECT
SUM(a.[money])
FROM #temp a
LEFT JOIN #temp2 b
ON a.id = b.id
--注意:如果b表有多条记录对应a表,就会发生你据说的那种情况.
from table1 行数跟 from table1 as a left join table2 as b 取出来的行数
是不一样的,当然 sum 起来就不一样
select sum(a.money) from table1 as a left join table2 as b
相当于原先table1一条记录的a.money对应table2多个,
也就是同一个table1.money可能出现多次,那么相加后的值肯定大于第一种的sum,
所以第二种是错的,要和第一种机同的化,必须使table2和table1是一对一的对应,
如table2先group by 那个连接条件的字段后,再与table1对应
形成了左连接 就会是一对多的关系了