我有一个带有字段id
(主键)和的表fid
。我想获取id
匹配特定值的记录,以及具有相同fid
值的所有相关记录。
我可以做这个:
SELECT * FROM mytable
WHERE fid = (SELECT TOP 1 fid FROM mytable WHERE id = 'somevalue')
但是我不希望相关记录是否fid
为特定值(在我的情况下为空的guid值)。
有没有办法在单个SQL语句中执行此操作?我正在使用SQL Server 2008 R2。
更新:
看到目前为止的答案,我想我可能没有清楚地问过我的问题。id
并且fid
永远不会平等。LEFT JOIN
可能正是我所需要的,但是我有点不懂SQL。我希望将以下两个查询作为单个语句:
SELECT * FROM mytable WHERE id = 'somevalue'
SELECT * FROM mytable WHERE fid =
(SELECT TOP 1 fid FROM mytable
WHERE id = 'somevalue' AND fid != '00000000-0000-0000-0000-000000000000')
根据您的修订,问题似乎是“选择所有id
具有特定值的行,以及所有其他具有id
匹配” somevalue”fid
且不为null的行。
以下内容捕获了此逻辑:
SELECT t.*
FROM mytable t left outer join
(SELECT TOP 1 fid
FROM mytable
WHERE id = 'somevalue' AND fid <> '00000000-0000-0000-0000-000000000000'
) t1
on t.fid = t1.fid
WHERE id = 'somevalue' or t1.fid is not null;
因为id
是主键,所以t1
子查询将返回0或1行。当它返回0行时,您只会得到与之匹配的原始行'somevalue'
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句