我有表 Job
和表 Company
。每个工作项目将针对一家公司。我想编写一个查询来列出工作。
公司有一个数量栏。当职位从 Job
中列出时,为给定公司列出的职位数量就是此 Quantity
列中的数字。
数据示例
例如:公司 A 的数量为 2。查询数据将返回前 2 个职位。
如何在 sql 查询中执行此操作?
表作业
| id | Title | Company ID |
|:---|------:|:------------:|
| 1 | Job 1 | 1
| 2 | Job 2 | 1
| 3 | Job 3 | 1
| 4 | Job 4 | 2
| 5 | Job 5 | 2
表公司
| id | Title | Quantity|
|:---|----------:|:-------:|
| 1 | Company 1| 2
| 2 | Company 2| 2
以及查询结果Select * From Job
=> With condition limit quantity of company.
| id | Title | Company ID |
|:---|------:|:----------:|
| 1 | Job 1 | 1
| 2 | Job 2 | 1
| 4 | Job 4 | 2
| 5 | Job 5 | 2
最佳答案
创建过程,您可以使用带有 LIMIT 的变量
DELIMITER $$
CREATE PROCEDURE `GetJobs`()
NO SQL
BEGIN
DECLARE cid INT;
DECLARE jobsLimit INT;
DECLARE n INT DEFAULT 0;
DECLARE i INT DEFAULT 0;
CREATE TEMPORARY TABLE JobListTemp (
id INT,
Title VARCHAR(255),
CompanyID INT
) ENGINE=MEMORY;
SELECT COUNT(*) FROM Company INTO n;
SET i=0;
WHILE i<n DO
SET cId = (SELECT id FROM Company LIMIT i,1);
SET jobsLimit = (SELECT quantity FROM Company WHERE id = cId LIMIT 1);
INSERT INTO JobListTemp SELECT * FROM Job WHERE CompanyID = cId LIMIT jobsLimit;
SET i = i + 1;
END WHILE;
SELECT * FROM JobListTemp;
DROP TABLE JobListTemp;
END$$
DELIMITER ;
关于mysql - 限制来自另一个表属性的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39405851/