我有表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
=>有公司的条件限制数量。
| id | Title | Company ID |
|:---|------:|:----------:|
| 1 | Job 1 | 1
| 2 | Job 2 | 1
| 4 | Job 4 | 2
| 5 | Job 5 | 2
答案 0 :(得分:1)
创建程序,您可以使用带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 ;
答案 1 :(得分:0)
我认为你可以使用内部sqlquery。
例如:
select innerTab.id,innerTab.Title,innerTab.companyid
from (select * from job order by id limit 2) innerTab
inner join Company on innerTab.companyid=company.companyid
colname与你不一样。
所以你可以改变它以确保sql可以运行。