sql查询只返回一行

2skhul33  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(390)

我是sql新手,我有一个看似简单的问题,但我不知道该怎么办。
我有两张table,一张付款,一张证书。我要返回满足条件的所有证书,即它们的公钥在payment表中的未付行中。我尝试使用join,但是当我 只是想要证书。
这是付款表:

以下是证书表:

以下是我尝试加入的内容:

SELECT * 
  FROM certificate
  WHERE created_at BETWEEN '${beginDate}' AND '${endDate}'
  LEFT JOIN payment ON certificate.public_key = payment.certificate_id;
vu8f3i0k

vu8f3i0k1#

我要返回满足条件的所有证书,即它们的公钥在payment表中的未付行中。
如果我跟对了,你可以用 exists :

select c.*
from certificate c
where exists (
    select 1
    from payment p
    where 
        p.certificate_id = c.public_key
        and created_at BETWEEN :beginDate AND :endDate
        and p.status = 'unpaid'
)

注意,根据您的问题描述,我在 payment(status) .
这种方法的好处是它不会复制 certificate 行中有多个匹配的“未付”行 payment table。

unftdfkk

unftdfkk2#

我要返回满足条件的所有证书,即它们的公钥在payment表中的未付行中。
这就意味着:

SELECT c.* 
FROM certificate c JOIN
     payment p
     ON c.public_key = p.certificate_id;
WHERE c.created_at BETWEEN ? AND ?

不需要外部联接,并且 JOIN 是中的操作员 FROM 条款。

相关问题