Sql 内部联接数据库查询?

Sql 内部联接数据库查询?,sql,database,Sql,Database,我有两个表,项目表和项目表 items_表包含以下列: id, name, desc, quantity, unit_price 而item_bidding_表有以下列 id, item_id(FK), amount 其中,item_id是item_bidding_表的外键 我需要一个查询,以从items\u表中返回以下条件的所有列的完整行: 项目投标表中的金额值必须大于项目表中的单价 返回的单价值必须是项目投标表中的最大金额 例如: 表中的项目: 项目投标表格: 预期产出: [1

我有两个表,项目表和项目表

items_表包含以下列:

id, name, desc, quantity, unit_price 
而item_bidding_表有以下列

id, item_id(FK), amount 
其中,item_id是item_bidding_表的外键

我需要一个查询,以从items\u表中返回以下条件的所有列的完整行:

项目投标表中的金额值必须大于项目表中的单价

返回的单价值必须是项目投标表中的最大金额

例如:

表中的项目:

项目投标表格:

预期产出:

 [1  | rice | food |    5     |     12     ]
其中12是项目投标表中的最大金额


那么,返回此输出需要什么查询?

您可以使用下面的查询来获得所需的结果

select 
    i.id, i.name, i.desc, i.quantity,
    max(ib.amount) 
from 
    items_table i 
inner join 
    item_bidding_table ib on i.id = ib.item_id 
where 
    ib.amount > i.unit_price 
group by 
    i.id, i.name, i.desc, i.quantity 

提示:每当您需要使用诸如min、max、avg等聚合函数时,请考虑GROUPBY子句,并尝试按照该方向构建查询

您可以使用下面的查询来获得所需的结果

select 
    i.id, i.name, i.desc, i.quantity,
    max(ib.amount) 
from 
    items_table i 
inner join 
    item_bidding_table ib on i.id = ib.item_id 
where 
    ib.amount > i.unit_price 
group by 
    i.id, i.name, i.desc, i.quantity 
提示:每当您需要使用诸如min、max、avg等聚合函数时,请考虑GROUPBY子句,并尝试按照该方向构建查询

尝试此查询:

SELECT * FROM 
(
    SELECT *
    FROM item_bidding_table 
    ORDER BY amount DESC
) t
JOIN items_table t ON t.id = b.item_id
WHERE t.unit_price <= b.amount
GROUP BY t.id
子查询按降序排列出价。随着该组的增加,您将获得每个订单的最高出价。最后,需要join和where子句来满足您的条件。

尝试以下查询:

SELECT * FROM 
(
    SELECT *
    FROM item_bidding_table 
    ORDER BY amount DESC
) t
JOIN items_table t ON t.id = b.item_id
WHERE t.unit_price <= b.amount
GROUP BY t.id

子查询按降序排列出价。随着该组的增加,您将获得每个订单的最高出价。最后,需要join和where子句来满足您的条件。

这将在几乎所有SQL后端中都有效,而且效率也不取决于表id是否唯一-您没有真正说明它是否唯一:

   select name , desc , quantity, amount
    from items_table i
    inner join 
    (select item_id, max(amount) as amount 
    from item_bidding_table
   where amount > unit_price
   group by item_id) tmp on i.id = tmp.item_id

注意:这与此查询中的Max无关,但无论何时存在联接,首先进行聚合,然后进行联接。

这将在几乎所有SQL后端中都有效,而且效率也不取决于项\u表id是否唯一-您并没有说它是否唯一:

   select name , desc , quantity, amount
    from items_table i
    inner join 
    (select item_id, max(amount) as amount 
    from item_bidding_table
   where amount > unit_price
   group by item_id) tmp on i.id = tmp.item_id
注意:这与此查询中的Max无关,但只要存在联接,请先进行聚合,然后进行联接。

尝试以下操作:

从表a的项目中选择a.*,b.金额作为金额

交叉应用从item\u bidding\u表中选择maxamount作为金额,其中item\u id=a.id按item\u id b分组

从表a的项目中选择a.*,b.金额作为金额


交叉应用从item_bidding_表中选择maxamount作为金额,其中item_id=a.id按item_id b分组

定义item_bidding_表中最新金额的内容。这里没有可供排序的时间戳列。或者您是指项目表中大于单价的所有值中的最大值?大于特定项目单价的最大值我们希望看到您尽最大努力。项目表中最新金额的定义是什么。这里没有可供排序的时间戳列。或者你的意思是项目表中大于单价的所有值中的最大值?大于特定项目单价的最大值我们希望看到你的最大努力。