我有以下数据结构,我试图找到唯一ID,其中值字母值等于到A和B(即选择ID = 1,但不是ID = 3或5)。 并且还找到唯一ID,其中值AlphaBets值包含两者 A和B(即选择ID = 1,3和5)。
.tile_nav li ul {
display:none;
margin: 0 2px 2px;
}
答案 0 :(得分:2)
这应该做:
╔═══╦════════════╦═════════════╗
║ ║ ID ║ Alphabets ║
╠═══╬════════════╬═════════════╣
║ 1 ║ 1 ║ A ║
║ 1 ║ 1 ║ B ║
║ 4 ║ 2 ║ B ║
║ 5 ║ 2 ║ D ║
║ 6 ║ 3 ║ A ║
║ 7 ║ 3 ║ B ║
║ 8 ║ 3 ║ D ║
║ 9 ║ 4 ║ A ║
║ 10║ 4 ║ C ║
║ 11║ 5 ║ A ║
║ 12║ 5 ║ B ║
║ 13║ 5 ║ C ║
║ 14║ 5 ║ D ║
╚═══╩════════════╩═════════════╝
CREATE TABLE dbo.Alphabets(
ID int NOT NULL
,Alphabets char(1) NOT NULL
,CONSTRAINT PK_Alphabets PRIMARY KEY (ID, Alphabets)
);
INSERT INTO dbo.Alphabets VALUES
(1, 'A')
,(1, 'B')
,(2, 'B')
,(2, 'D')
,(3, 'A')
,(3, 'B')
,(3, 'D')
,(4, 'A')
,(4, 'C')
,(5, 'A')
,(5, 'B')
,(5, 'C')
,(5, 'D');
还有许多其他方法可以完成任务,但这是最简单的方法之一。
单次传递中更加模糊(但更有效)的解决方案使用聚合和CASE表达式:
SELECT ID
FROM Alphabets
WHERE Alphabets IN ('A','B')
EXCEPT
SELECT ID
FROM Alphabets
WHERE Alphabets NOT IN ('A','B')