mysql - 限制来自另一个表属性的数据

标签 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 => 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/

相关文章:

PHP-MySQL-我想将数组中的任何值与我从表单收到的 _POST 值进行比较

mysql - 使用LOAD DATA时如何在MySQL中加载日期数据

mysql - 用子查询和公式给出结果?

mysql - 基于列值的条件 JOIN

sql - 如何删除 '2002' 和 '2006' 之间的特定键?

mysql - Insert Into 遇到各种问题

mysql - 如何显示小数点后两位的乘法结果

python - Play 框架和 Python

java - 使用 Java 从 MySQL 表中获取行数

c# - 在冗长的异步 Postack 期间从进度表查询