如何使用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