如何使用sql选择其他相关表中不存在的记录?
我有三张像下面这样的桌子如何使用sql选择其他相关表中不存在的记录?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有三张像下面这样的桌子 CREATE TABLE [dbo].[Languages]( [Title] [nvarchar](50) NOT NULL, [Description] [nvarchar](200) NULL, [Id] [uniqueidentifier] NOT NULL, CONSTRAINT [PK_Language] PRIMARY KEY NONCLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF,
CREATE TABLE [dbo].[Languages](
[Title] [nvarchar](50) NOT NULL,
[Description] [nvarchar](200) NULL,
[Id] [uniqueidentifier] NOT NULL,
CONSTRAINT [PK_Language] PRIMARY KEY NONCLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)
CREATE TABLE [dbo].[LocalizationKeys](
[Key] [nvarchar](500) NOT NULL,
[Id] [uniqueidentifier] NOT NULL,
CONSTRAINT [PK_LocalizationKey] PRIMARY KEY NONCLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)
CREATE TABLE [dbo].[LocalizationValues](
[Value] [nvarchar](500) NOT NULL,
[LanguageId] [uniqueidentifier] NULL,
[LocalizationKeyId] [uniqueidentifier] NULL,
[Id] [uniqueidentifier] NOT NULL,
CONSTRAINT [PK_LocalizationValue] PRIMARY KEY NONCLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)
有以下数据
Languages
Title Description Id
en-US English C3B95465-0B0B-4B97-8C60-19D611F6A185
fi-FI Finnish 7EDF3C04-3846-4B01-8045-315E26D05CD1
LocalizationKeys
Key Id
Save A4B7E6DE-BBCE-40FB-8F0E-FE1034B2CAAF
LocalizationValues
Value LanguageId LocalizationKeyId Id
Save C3B95465-0B0B-4B97-8C60-19D611F6A185 A4B7E6DE-BBCE-40FB-8F0E-FE1034B2CAAF 6EB167F5-550B-435E-B6B3-35A02F21F630
现在,在上面的LocalizationValues表中,LocalizationKeyId='A4B7E6DE-BBCE-40FB-8F0E-FE1034B2CAAF'缺少语言fi的值
所以我想通过给LanguageId哪个LocalizationKeyId找到答案
缺少该语言ID
我已经测试了这个查询的记录-它不工作
您可以为此使用不存在
:
SELECT [Key], Id
FROM LocalizationKeys AS lk
WHERE NOT EXISTS (SELECT 1
FROM Languages AS l
JOIN LocalizationValues AS lv ON l.Id = lv.LanguageId
WHERE l.Title = 'fi-FI' AND lv.LocalizationKeyId = lk.Id)
上述查询返回指定的LanguageId
缺少的LocalizationKeyId
值
尝试下面的查询
select * from Languages l
inner join LocalizationKeys lk on 1=1
left join LocalizationValues lv on lv.LanguageId = l.id and lv.LocalizationKeyId = lk.id
如果您发现LocalizationValues字段值为空,则其丢失只是一个左连接
?不工作我尝试了:(由于不存在值,所以有点不同。也没有空检查,也没有2表连接。请检查问题为什么左连接不起作用?您可以共享该查询吗?测试该记录是否不起作用:(从语言中选择locvalue.LocaliZationKeyId,locvalue.LanguageId lang left join localizationvalues lang上的locvalue.Id=locvalue.LanguageId left join[LocalizationKeys]locKey on locKey.Id=locvalue.LocaliZationKeyId
可能与fantastic!Giorgos:重复)像charm一样工作,非常感谢!需要帮助才能转换为linq我试过这样的`var result=(从lk in localizationKey where!(从l in lang加入lv in localizationValue on l.Id等于lv.LanguageId其中l.Title==“en US”&&lv.LocalizationKeyId==lk.Id选择l)选择lk).ToList();“@Neo您可以尝试发布一个新问题。不建议在评论中回答问题。如有新问题,请勾选此处
select * from Languages l
inner join LocalizationKeys lk on 1=1
left join LocalizationValues lv on lv.LanguageId = l.id and lv.LocalizationKeyId = lk.id