我試圖將我的問題簡化爲我在下面寫下的一個基本示例,實際問題更加複雜,因此下面的查詢可能沒有太大意義,但基本概念是相同的(數據從一個查詢到另一個查詢)。將一個查詢的結果輸入另一個查詢
查詢1:
SELECT Ping.ID as PingID, Base.ID as BaseID FROM
(SELECT l.ID, mg.DateTime from list l
JOIN mygroup mg ON mg.ID = l.MyGroup
WHERE l.Type = "ping"
ORDER BY l.ID DESC
) Ping
INNER JOIN
(SELECT l.ID, mg.DateTime from list l
JOIN mygroup mg ON mg.ID = l.MyGroup
WHERE l.Type = "Base"
ORDER BY l.ID DESC
) Base
ON Base.DateTime < Ping.DateTime
GROUP BY Ping.ID
ORDER BY Ping.ID DESC;
+--------+--------+
| PingID | BaseID |
+--------+--------+
| 11 | 10 |
| 9 | 8 |
| 7 | 6 |
| 5 | 3 |
| 4 | 3 |
+--------+--------+
//從下面我需要通過PingID以上和10由上文了baseid然後將結果替換11,如果沒有結果顯示在上文第三列(0, 1個,如果結果)
查詢2:
SELECT * FROM
(SELECT sl.Data FROM list l
JOIN sublist sl ON sl.ParentID = l.ID
WHERE l.Type = "ping" AND l.ID = 11) Ping
INNER JOIN
(SELECT sl.Data FROM list l
JOIN sublist sl ON sl.ParentID = l.ID
WHERE l.Type = "base" AND l.ID = 10) Base
ON Base.Data < Ping.Data;
我怎樣才能做到這一點?再次,我不確定我會收到什麼樣的建議,但請理解查詢2實際上超過200行,而且我基本無法觸及它,因此我沒有那麼大的靈活性,因爲我想和理想情況下我想在SQL中完成所有工作,而不必編寫腳本。
CREATE DATABASE lookback;
use lookback;
CREATE TABLE mygroup (
ID BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
DateTime DateTime
) ENGINE=InnoDB;
CREATE TABLE list (
ID BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Type VARCHAR(255),
MyGroup BIGINT NOT NULL,
Data INT NOT NULL
) ENGINE=InnoDB;
CREATE TABLE sublist (
ID BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ParentID BIGINT NOT NULL,
Data INT NOT NULL
) ENGINE=InnoDB;
INSERT INTO mygroup (DateTime) VALUES ("2012-03-09 22:33:19"), ("2012-03-09 22:34:19"), ("2012-03-09 22:35:19"), ("2012-03-09 22:36:19"), ("2012-03-09 22:37:19"), ("2012-03-09 22:38:19"), ("2012-03-09 22:39:19"), ("2012-03-09 22:40:19"), ("2012-03-09 22:41:19"), ("2012-03-09 22:42:19"), ("2012-03-09 22:43:19");
INSERT INTO list (Type, MyGroup, Data) VALUES ("ping", 1, 4), ("base", 2, 2), ("base", 3, 4), ("ping", 4, 7), ("ping", 5, 8), ("base", 6, 7), ("ping", 7, 8), ("base", 8, 3), ("ping", 9, 10), ("base", 10, 2), ("ping", 11, 3);
INSERT INTO sublist (ParentID, Data) VALUES (1, 2), (2, 3), (3, 6), (4, 8), (5, 4), (6, 5), (7, 1), (8, 9), (9, 11), (10, 4), (11, 6);
SQL搗鼓以上:http://sqlfiddle.com/#!2/c6781/1 – 2012-03-09 23:07:53
非常酷的感謝! – user391986 2012-03-12 18:24:54
謝謝大家,我用這個答案學了一大堆東西,不幸的是沒有人完成這個工作,所以在擺弄了一些東西之後,我找到了一個可行的解決方案!我基本上創建了查詢2的存儲過程,然後從查詢1中添加了一個額外的參數,它將SELECT Ping.ID稱爲PingID,Base.ID作爲BaseID,(SELECT fnc_callquerytwo(PingID,BaseID))FROM – user391986 2012-03-12 18:54:08