我想參加4個表和表中的一個不具有所有匹配的ID,但我仍然需要顯示的加盟,甚至結果沒有相應ID的行。如何加入多個表,並用返回NULL值結果太
這裏就是我談論的例子:
示例表:
DECLARE @Table1 TABLE (id INT PRIMARY KEY CLUSTERED, ts DateTime, tbl2_id INT, price DECIMAL(4,2), tbl3_id INT, tbl4_id INT) INSERT INTO @Table1 VALUES(1, '2013-07-25 09:30:00', 10, 10.25, 1); INSERT INTO @Table1 VALUES(2, '2013-07-25 10:25:00', 20, 25.25, 1); INSERT INTO @Table1 VALUES(3, '2013-07-25 11:45:00', 30, 30.15, 2); INSERT INTO @Table1 VALUES(4, '2013-07-25 13:31:00', 40, 80.40, 2); DECLARE @Table2 TABLE (id INT PRIMARY KEY CLUSTERED, symbol VARCHAR(25), tbl1_id int) INSERT INTO @Table2 VALUES(10, 'XYZ', 1); INSERT INTO @Table2 VALUES(20, 'ABC', 2); INSERT INTO @Table2 VALUES(30, 'RST', 3); INSERT INTO @Table2 VALUES(40, 'EFG', 4); DECLARE @Table3 TABLE (id INT PRIMARY KEY CLUSTERED, exch VARCHAR(25)) INSERT INTO @Table3 VALUES(1, 'A'); INSERT INTO @Table3 VALUES(2, 'B'); INSERT INTO @Table3 VALUES(3, 'C'); INSERT INTO @Table3 VALUES(4, 'D'); DECLARE @Table4 TABLE (id INT PRIMARY KEY CLUSTERED, int tbl1_id, cnt INT) INSERT INTO @Table4 VALUES(1, 2, 19); INSERT INTO @Table4 VALUES(2, 4, 2013);
實例查詢:
SELECT tbl1.id, tbl1.ts, tbl2.symbol, IFNULL(tbl3.cnt,0) AS cnt FROM TABLE1 tbl1 JOIN TABLE2 tbl2 ON tbl1.tbl2_id = tbl2.id JOIN TABLE3 tbl3 ON tbl3.id = tbl1.tbl3_id LEFT OUTER JOIN TABLE4 tbl4 ON tbl1.tbl4_id = tbl4.id WHERE tbl1.ts BETWEEN '2013-07-25 09:30:00 AND '2013-07-25 16:00:00' AND tbl1.price >= 15.00 LIMIT 1000;
所以基本上我想要做的是,如果tbl4沒有tbl1_id我還是希望看到從表1的結果,但顯示0值CNT ...當我運行此查詢我收到了一堆重複條目和數據是不看的權利。
嘗試連接表在表1中一次一個,看看問題出在哪裏。 –
我有我的問題是與tbl4 ......我沒有在TBL1每個ID對應的ID,但我還是想顯示爲0的結果爲CNT值時,有對TBL1和tbl4 –
沒有ID匹配取而代之的是左外連接做表4將包括從表4中的所有記錄和配對有比賽 – ObieMD5