[英]SQL query to insert sinlge row from one table into multiple rows in another table
[英]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 ?
不需要外連接, JOIN
是FROM
子句中的運算符。
我想返回所有滿足條件的證書,即它們的 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.