MySQL 是一個開源的關系型數據庫管理系統,被廣泛應用于各種 Web 應用開發中。在實際的開發過程中,常常會遇到需要循環遍歷兩張表的情況,本文將介紹如何使用 MySQL 來實現這一功能。
-- 首先,我們需要創建兩張表。以下是兩張示例表的SQL代碼: CREATE TABLE `table1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `table2` ( `id` int(11) NOT NULL AUTO_INCREMENT, `table1_id` int(11) NOT NULL, `description` varchar(255) NOT NULL, PRIMARY KEY (`id`), KEY `table1_id` (`table1_id`), CONSTRAINT `table2_ibfk_1` FOREIGN KEY (`table1_id`) REFERENCES `table1` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- table1 表包含 id 和 name 兩個字段,table2 表包含 id、table1_id 和 description 三個字段。其中,table2 表的 table1_id 字段為外鍵,引用了 table1 表的 id 字段。 -- 接下來,我們將通過以下代碼遍歷兩個表: DELIMITER // CREATE PROCEDURE traverse_table1_table2() BEGIN DECLARE i INT DEFAULT 1; DECLARE j INT DEFAULT 1; DECLARE count1 INT DEFAULT 0; DECLARE count2 INT DEFAULT 0; DECLARE table1_id INT DEFAULT 0; DECLARE name VARCHAR(50); SELECT COUNT(*) INTO count1 FROM table1; SELECT COUNT(*) INTO count2 FROM table2; WHILE i<= count1 DO SELECT id, name INTO table1_id, name FROM table1 WHERE id = i; WHILE j<= count2 DO DECLARE table1Id INT DEFAULT 0; DECLARE description VARCHAR(255); SELECT table1_id, description INTO table1Id, description FROM table2 WHERE id = j; IF table1_id = table1_id THEN SELECT CONCAT(name, ' - ', description) AS 'Info'; END IF; SET j = j + 1; END WHILE; SET i = i + 1; SET j = 1; END WHILE; END // DELIMITER ; -- 以上代碼會創建一個名為 traverse_table1_table2 的存儲過程,該存儲過程會循環遍歷 table1 和 table2 兩張表,并輸出關聯的信息。 -- 最后,我們可以通過以下代碼來調用這個存儲過程: CALL traverse_table1_table2(); -- 調用該存儲過程后,你將會看到輸出結果中的 name 和 description 字段已經被組合在了一起,形成了一條條有意義的信息。