【发布时间】:2015-06-01 07:45:32
【问题描述】:
我有多个表:
Person
---------------------
IDPerson, Name
StickerTransaction
---------------------
IDTransac, IDPerson, IDSomeoneElse, NbStickersReceived, NbStickersGiven
Purchase
---------------------
IDPurchase, IDPerson, NbStickersBought
我正在尝试让每个从未进行过交易或目前拥有 0 个贴纸的人。要获得一个人拥有的贴纸数量,公式如下:
NbStickersBought + NbStickersReceived - NbStickersGiven
这是我目前收到的查询。我遇到的问题是在子子查询中......我无权访问此人的 ID。
有没有办法访问这个人的 ID,或者有没有更好的方法来编写这个查询?
SELECT People.IDPerson, People.Name
FROM
(
-- Selects people that never made a sticker transaction
SELECT p.IDPerson, p.Name
FROM Person p
LEFT JOIN StickerTransaction sT
ON p.IDPerson = sT.IDPerson
WHERE sT.IDPerson IS NULL
UNION
-- Selects people that have currently 0 sticker
SELECT p.IDPerson, p.Name
FROM Person p
WHERE 0 = (
SELECT SUM(NbStickers) AS NbStickers
FROM (
-- I do not have access to p.IDPerson here...
SELECT (sT.NbStickersReceived - sT.NbStickersGiven) AS NbStickers
FROM StickerTransaction sT
WHERE sT.IDPerson = p.IDPerson
UNION ALL
-- I do not have access to p.IDPerson here either...
SELECT pu.NbStickersBought AS NbStickers
FROM Purchase pu
WHERE pu.IDPerson = p.IDPerson
)
)
) People
【问题讨论】:
-
您使用的是哪种 dbms 产品?子查询应该可以访问其外部查询的 p.IDPerson。
-
我用的是HFSQL,WinDev自带的DBMS。
标签: sql sum subquery correlated-subquery