簡體   English   中英

從SQL表中選擇一對

[英]select a pair from an SQL table

我想選擇一對符合特定要求的供應商ID,即第一個供應商收取的費用高於某個部分的第二個供應商ID。

SELECT DISTINCT S1.sid, S2.sid
FROM suppliers JOIN catalog ON (suppliers.sid = catalog.sid) AS S1,
suppliers JOIN catalog ON (suppliers.sid = catalog.sid) AS S2
WHERE S1.pid = S2.pid AND S1.cost > S2.cost;

現在這不起作用。 誰能告訴我問題出在哪里?

您在表達聯接的方式上犯了一個錯誤:對於添加到查詢中的每個表,不需要重復左側的表(即suppliers )。

以下是使用表別名修復查詢的方法:

SELECT DISTINCT S1.sid, S2.sid 
FROM suppliers s
JOIN catalog s1 ON s.sid=s1.sid
JOIN catalog s2 ON s.sid=s2.sid 
WHERE S1.pid=S2.pid AND S1.cost>S2.cost

您的查詢的一個問題是您在from子句中多次使用相同的表而沒有表別名來區分不同的引用。

這是一種不同的方法,它使用CTE組合supplierscatalogs ,然后是簡單的連接:

with sc as (
      select s1.sid, pid, cost
      from suppliers s1 join
           catalog c1
           on s1.sid = c1.sid
     )
select distinct sc1.sid, sc2.sid
from sc sc1 join
     sc sc2
     on sc1.pid = sc2.pid and sc1.cost > sc2.cost;

這個請求似乎是一個奇怪的請求 - 如果你有一個給定部分的多個供應商,你會得到很多行。

編輯:

令我感到震驚的是你根本不需要suppliers表:

select distinct c1.sid, c2.sid
from catalog c1 join
     catalog c2
     on c1.pid = c2.pid and c1.cost > c2.cost;

暫無
暫無

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

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