簡體   English   中英

SQL 在另一個表的多行中找到 id 時查詢只返回一行

[英]SQL Query to return only one row when id is found in multiple rows from another table

我是 SQL 的新手,我遇到的問題可能看起來很簡單,但我不知道該怎么辦。

我有兩張桌子,一張用於付款,一張用於證書。 我想返回所有滿足條件的證書,即它們的 public_key 存在於支付表中的未支付行中。 我嘗試使用 join,但是當我只想要證書時它會返回所有付款請求。

這是付款表: 在此處輸入圖像描述

這是證書表: 在此處輸入圖像描述

這是我嘗試使用 JOIN 的方法:

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

我想返回所有滿足條件的證書,即它們的 public_key 存在於支付表中的未支付行中。

這將建議這樣的事情:

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

不需要外連接, JOINFROM子句中的運算符

我想返回所有滿足條件的證書,即它們的 public_key 存在於支付表中的未支付行中。

如果我正確地跟隨你,你可以使用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)上添加了過濾條件。

這種方法的好處是,如果payment表中有一個以上匹配的“未支付”行,它不會復制certificate行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM