【问题标题】:sql orcale query for comparing prices in different tables用于比较不同表中价格的sql oracle查询
【发布时间】:2021-03-11 21:18:45
【问题描述】:

我需要有关基本查询的帮助。我已经得到了表格,我需要找到以下内容:

“列出以高于要价的价格出售产品的人的姓名” "查找销售产品数量最少的客户的姓名"

这是表格:

表客户

CID CNAME
--- ---------- 

餐桌人

PID ENAME SALARY MID
--- -------------------

餐桌产品

POID ATITLE     ARTIST      PRICEASKING
--- ---------- ----------- ----------

餐桌制作

POID PID CID PRICESOLD 
--- --- --- ----------

让我们假设这些表中有数据。我如何弄清楚我之前写的查询。这是我所拥有的:

select PID from Makes where (select PRICESOLD from MakesD where POID IN (select POID from Makes)) > (select PRICEASKING from Product where POID IN (select POID from Makes));

【问题讨论】:

  • 如果您使用的是 oracle,请不要标记 MySQL(反之亦然)
  • 如果一个“教授”禁止使用连接,我会很想找一个不同的教授

标签: mysql sql select subquery inner-join


【解决方案1】:

如果您想要所有pricesold 大于对应productpriceaksingmakes,以及对应peoplename,您可以使用连接:

select ma.*, pe.ename
from makes ma
inner join people pe on pe.pid = ma.pid
inner join product pr on pr.poid = ma.poid
where ma.pricesold > pr.priceasking

如果你只想要至少有一个这样的人的名字,那么你可以使用exists

select pe.ename
from people pe
where exists (
    select 1
    from makes ma
    inner join product pr on pr.poid = ma.poid
    where ma.pricesold > pr.priceasking and pe.pid = ma.pid
)

如果你想在没有任何连接的情况下表达这个(在我看来,这不会使查询更简单也更有效),那么你可以使用相关子查询来恢复 priceaskingproduct (这只要poidproduct 中的唯一键,就可以正常工作):

select pe.ename
from people pe
where exists (
    select 1
    from makes ma
    where 
        e.pid = ma.pid
        and ma.pricesold > (select pr.priceasking from product pr where pr.poid = ma.poid)
)

【讨论】:

  • 嘿,我不允许使用内连接。我不能使用简单的语句吗?
  • @user372204:使用连接比使用其他技术更简单。为什么不在这里使用连接?
  • 不幸的是,我也不被允许:/教授不想要它大声笑
  • 看到了,但查询似乎没有返回最低的绘画数量?它回来了,谁卖了至少一个不是我想要的:/
  • @user372204:这回答了您的这部分问题:列出以高于要价的价格出售产品的人的姓名
猜你喜欢
  • 1970-01-01
  • 2014-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多