我有一个简单的表格,其中有两列uid
和isEnded
。 uid
可以在此表格中多次出现,其值可以为0
或1
。对于每个唯一0
,值uid
只能出现一次。
例如:
| uid | isEnded |
------------------
| 1 | 1 |
| 1 | 1 |
| 1 | 0 |
| 2 | 1 |
| 2 | 1 |
| 3 | 0 |
| 3 | 1 |
------------------
我需要的是一个选择所有uid
所有isEnded
值设置为1
的{{1}}的查询。
所以在上面的例子中,我应该只返回uid
2。因为其他两个uid
仍然将isEnded
设置为0
。
我可以通过什么样的查询获得这样的结果?因此,只有uid
个isEnded
值不能设置为0
。
答案 0 :(得分:2)
好吧,如果您要选择的1
的所有值都应为uid
,那么这也意味着最小值也将为1
:
SELECT uid
FROM table
GROUP BY uid
HAVING MIN(isEnded) = 1
答案 1 :(得分:1)
尝试以下查询:
SELECT DISTINCT uid
FROM #Tab
WHERE UID NOT IN
(SELECT uid FROM #tab WHERE isended = 0)
答案 2 :(得分:0)
这应该可以解决问题
SELECT uid
FROM table t1
WHERE NOT EXISTS
(SELECT *
FROM table t2
WHERE t2.uid=t1.uid
AND isEnded=0)
答案 3 :(得分:0)
CREATE TABLE A
(
uids int,
isEnded bit
)
go
INSERT INTO A
VALUES (1,1),
(1,1),
(1,0),
(2,1),
(2,1),
(3,0),
(3,1)
SELECT A.uids, A.isended
FROM A
WHERE A.uids NOT IN
(SELECT A.uids FROM A WHERE A.isended = '0')
如果您需要不同的记录,请在选择查询中使用distinct关键字,如下所示:
SELECT DISTINCT A.uids, A.isended
FROM A
WHERE A.uids NOT IN
(SELECT A.uids FROM A WHERE A.isended = '0')
答案 4 :(得分:0)
我会为你做这件事:
SELECT t.uid
FROM YourTable AS t
GROUP BY t.uid
HAVING MIN(t.isEnded) = 1;
group by
会将特定uid
的所有行视为一个块。 having
为该块设置条件。
编辑:该死的! @Damien打败了我。