我正在尝试连接 4 个表,其中一个表没有所有匹配的 ID,但我仍然需要显示连接的结果,甚至是没有相应 ID 的行。
这是我正在谈论的一个例子:
示例表:
DECLARE @Table1 TABLE(id INT 主键集群,ts DateTime,tbl2_id INT,价格 DECIMAL(4,2),tbl3_id INT,tbl4_id INT) 插入@Table1 值(1, '2013-07-25 09:30:00', 10, 10.25, 1); 插入@Table1 值(2, '2013-07-25 10:25:00', 20, 25.25, 1); 插入@Table1 值(3, '2013-07-25 11:45:00', 30, 30.15, 2); 插入@Table1 值(4, '2013-07-25 13:31:00', 40, 80.40, 2); DECLARE @Table2 TABLE (id INT PRIMARY KEY CLUSTERED,符号 VARCHAR(25),tbl1_id int) 插入@Table2 值(10,'XYZ',1); 插入@Table2 值(20,'ABC',2); 插入@Table2 值(30,'RST',3); 插入@Table2 值(40,'EFG',4); DECLARE @Table3 TABLE (id INT PRIMARY KEY CLUSTERED, exch VARCHAR(25)) 插入@Table3 值(1,'A'); 插入@Table3 值(2,'B'); 插入@Table3 值(3,'C'); 插入@Table3 值(4,'D'); 声明 @Table4 表(id INT 主键集群,int tbl1_id,cnt INT) 插入@Table4 值(1、2、19); 插入@Table4 值(2、4、2013);
示例查询:
选择 tbl1.id, tbl1.ts, tbl2.symbol, IFNULL(tbl3.cnt,0) AS cnt 从表 1 tbl1 加入表 2 tbl2 ON tbl1.tbl2_id = tbl2.id 加入表 3 tbl3 ON tbl3.id = tbl1.tbl3_id 左外连接表4 tbl4 ON tbl1.tbl4_id = tbl4.id WHERE tbl1.ts 在 '2013-07-25 09:30:00 和 '2013-07-25 16:00:00' 之间 AND tbl1.price >= 15.00 限制 1000;
所以基本上我想要做的是如果 tbl4 没有 tbl1_id 我仍然希望看到 table1 的结果但显示 Cnt 的值为 0 ......当我运行这个查询时我得到了一堆重复条目和数据看起来不正确。