我需要用SQL发出请求。
我有一个包含ID的字段。 这些ID以两种方式写入,并以“ C0”或“ E0”作为前缀,例如:“ C0121213”或“ E0121213”。
我想进行一个查询,使我可以找到以C0开头但不重复以E0开头的ID数。
也就是说,我想查找没有C0或E0对的ID。
提前谢谢
我从一个请求开始:
SELECT *
FROM SBYN
WHERE ID IN (
SELECT LID
FROM SBYN
WHERE LEFT(ID,2) = 'C0'
OR LEFT(ID, 2) = 'E0'
GROUP BY LID HAVING COUNT(*) > 1
)
ORDER BY ID
答案 0 :(得分:2)
NOT EXISTS
浮现在脑海:
SELECT COUNT(*)
FROM SBYN s
WHERE s.ID LIKE 'C0%' AND
NOT EXISTS (SELECT 1
FROM SBYN s2
WHERE s2.ID LIKE 'E0%' AND
SUBSTRING(s2.ID, 2) = SUBSTRING(s.ID, 2)
);
如果要使用ID
,请使用SELECT ID
而不是SELECT COUNT(*)
。
答案 1 :(得分:1)
使用EXISTS
:
SELECT
ID
FROM SBYN s1
WHERE
ID LIKE 'C0%' AND
NOT EXISTS (SELECT 1 FROM SBYN s2
WHERE s2.ID LIKE 'E0' AND
SUBSTRING(s1.ID, 3) = SUBSTRING(s2.ID, 3));
答案 2 :(得分:1)
不存在:
select * from sbyn s
where not exists (
select 1 from sbyn
where left(id, 2) <> left(s.id, 2) and
right(id, 3, length(id)) = right(s.id, 3, length(s.id))
)
这将返回所有非重复项。
如果您只关心以C0
开头的内容,请添加到where子句:
and left(s.id) = 'C0'