0

これらは私のテーブルです:

Customer Table
--------------
CUST_ID
SUPPLIER1
SUPPLIER2

Supplier Table
--------------
SUPPLIER_ID
USERID

User Table
----------
USER_ID

ルール:

顧客は複数のサプライヤーを持つことができますが、顧客がいる場合、サプライヤーはユーザー テーブルに存在する必要があります。

すべてのサプライヤはユーザーでなければならないため、ユーザー テーブルにない、使用済みまたは割り当て済みのサプライヤをすべて見つける必要があります。

このクエリは、ユーザーではないすべてのサプライヤーを取得します

SELECT 
    U.*
FROM 
    USER U
LEFT JOIN 
    SUPPLIER S ON S.USER_ID = U.USER_ID
WHERE 
    S.USER_ID IS NULL

しかし、ユーザーではない顧客のサプライヤーをすべて取得するにはどうすればよいでしょうか?

私はこれを試しましたが、正しくないようです:

SELECT 
    *
FROM 
    USER U
LEFT JOIN 
    (SELECT C.SUPPLIER1, S.USER_ID FROM CUSTOMER C, SUPPLIER S WHERE 
     C.SUPPLIER1 = S.SUPPLIER_ID AND C.SUPPLIER1 IS NOT NULL) 
    S2 ON S2.USER_ID = U.USER_ID
WHERE 
    S2.USER_ID IS NULL

ありがとう

4

2 に答える 2

1
SELECT
C.Supplier1
FROM Customer C
LEFT JOIN Supplier S
ON C.Supplier1 = S.supplier_id

WHERE S.user_id IS NULL
于 2013-09-10T17:36:05.167 に答える
0

Customer テーブルが正規化されていない、つまり、顧客テーブルにサプライヤーの列が繰り返されていることが問題ですか。サプライヤー テーブルには 2 回参加できます。例えば

select C.Supplier1, U1.UserID, C1.Supplier2, U2.UserID
from Customer C
left join Supplier S1 on (S1.Supplier_id = C.Supplier1)
left join User U1 on (U1.UserID = C.Supplier1)
left join Supplier S2 on (SS.Supplier_id = C.Supplier2)
left join User U2 on (U2.UserID = C.Supplier2)
where 
   ((not C1.Supplier1 is null) and (U1.UserID is null))
or ((not C2.Supplier1 is null) and (U2.UserID is null))

これは、欠落しているサプライヤ 1 と欠落しているサプライヤ 2 の和集合として使用すると、より便利です。

于 2013-09-10T17:47:11.393 に答える