好的,所以我要做的基本上是在一个查询中检查2个表,一个用于查看该帐户是否启用了标志,然后检查是否有任何具有启用标志的帐户为零评级(负评级可以忽略)
所以我基本上有2张桌子
表:Accounts
AccountId Flag
-------- ---------
0001 1
0002 1
0003 0
0004 0
0005 0
0006 1
0007 1
0008 1
0009 1
表:Ratings
Accountid Rating
------- --------
001 -1
001 3
001 -5
002 2
002 3
002 7
005 3
005 5
008 4
009 -4
009 -5
我可以检查第一张表并轻松获得带有标志的ID
select AccountId
from Accounts
where Flag = 1;
| Account ID |
---------------
| 001 |
| 002 |
| 006 |
| 007 |
| 008 |
| 009 |
然后我遇到麻烦只检查查询的结果,找出哪一个没有任何正面评价
如果我能够使用php id能够创建一个数组并逐个询问每个结果并得出结果006,007和009
SELECT count(Rating)
FROM Ratings
WHERE Rating < 0 and AccountId = 001
1
SELECT count(Rating)
FROM Ratings
WHERE Rating < 0 and AccountId = 002
2
SELECT count(Rating)
FROM Ratings
WHERE Rating < 0 and AccountId = 006
0
SELECT count(Rating)
FROM Ratings
WHERE Rating < 0 and AccountId = 008
1
但是我在这个特定的服务器上没有这种能力,所以我需要能够一次性使用SQL Server(我只是开始学习)...有关我如何管理的任何想法它?
答案 0 :(得分:0)
SELECT r.AccountId, count(Rating)
FROM Ratings r
JOIN Accounts a
ON (a.AccountId = r.AccountId)
WHERE a.Flag = 1 AND r.Rating < 0
GROUP BY r.AccountId
答案 1 :(得分:0)
所以我觉得这很有效:
SELECT A.accountid
FROM accounts A
LEFT JOIN ( SELECT accountID ,
MAX(rating) AS rating
FROM ratings
GROUP BY accountID
) M ON A.accountID = M.accountID
WHERE A.flag = 1
AND (M.rating IS NULL OR M.rating < 0)
返回006,007,009
返回006和007,因为在评级表中根本没有评级,它们被标记为活动帐户。 009也被返回,因为在评级表中收到的最高评级小于0,因此该帐户收到的评分均不为正。