限制来自另一个表attribule

时间:2016-09-09 07:14:31

标签: mysql sql

我有表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

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可以运行。