sql—从两个mysql表中选择值

zfycwa2u  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(397)

我有两张table叫 Job 以及 Bid . 客户可以添加作业详细信息,并且多个供应商可以投标该作业。一旦客户从投标中选择一个供应商,该供应商id(sid)将在 Job table。我想选择与出价价值的工作细节。
这就是我试过的

SELECT job.id,job.title,job.desc,job.mobile,job.address, job.city,job.updatedAt,job.status,bid.value,customer.cName,supplier.sName
FROM job
LEFT JOIN customer 
     ON customer.id = job.cId 
LEFT JOIN supplier 
     ON supplier.id = job.sId
LEFT JOIN bid 
     ON bid.sId = job.sId`

但是这个查询显示了一些重复的混乱信息 job table
bid table

有两个供应商(sid=2和sid=1)投标了5号工作(我已经在 bid 表)。但是客户已经为5号作业选择了sid2。现在我想从那些没有混乱记录的表中进行选择。

omtl5h9j

omtl5h9j1#

我认为你只是错过了一个投标的加入条件,对选定的供应商过滤。允许没有供应商的作业同时逐出其供应商未被客户选择的作业的逻辑有点棘手,并且在 WHERE 条款:

SELECT ...
FROM job
INNER JOIN customer 
      ON customer.id = job.cId 
LEFT JOIN supplier 
      ON supplier.id = job.sId
LEFT JOIN bid 
     ON  bid.sId = job.sId 
     AND bid.jId = job.id   --> here
WHERE supplier.id IS NULL OR bid.id IS NOT NULL
nzrxty8p

nzrxty8p2#

在select语句中,尝试从bid表中检索数据 bid.value 但你没有加入那张table。

select j.id,
       j.title,
       j.desc,
       j.mobile,
       j.address,
       j.city,
       j.updatedAt,
       j.status,
       b.value,
       c.cName,
       s.sName
from job as j
         inner join customer as c
                    on j.cId = c.id
         inner join supplier as s
                    on j.sId = s.id
         inner join bid as b
                    on j.id = b.jId;

相关问题