如何在sql中获取缺少的值?
问题描述:
我需要帮助。如何在sql中获取缺少的值?
我有一个与其他两个表t1和t3有关的sql表t2。
T2具有字段:
idFromt3 idFromt1 Value
1 14 text1
2 14 text2
1 44 text1
2 44 text2
3 44 text3
我在寻找值,其中ifFromt3丢失。 我想在这个例子中使用ifFromt3 = 3的值,因为它不存在。
我这样做就像这个例子,但它不能正常工作。
SELECT t3.idFromt3, t3.idFromt1
FROM t3
INNER JOIN t2
ON t3.LanguageMessageCodeID <> t2.idFromt2
这是3张表格。
CREATE TABLE [dbo].[t3](
[t3ID] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NOT NULL,
)
CREATE TABLE [dbo].[t2](
[t2ID] [int] IDENTITY(1,1) NOT NULL,
[t3ID] [int] NOT NULL,
[t1ID] [int] NOT NULL,
)
CREATE TABLE [dbo].[t1](
[t1ID] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NOT NULL,
)
UPDATE:
表数据: http://www.2shared.com/photo/40yY6FC-/Untitled.html
我需要一个查询,返回表LangugageMessageCodes所有丢失的组合。
在这种情况下:
LanguageMessageCodeID LanguageID
3 14
1 47
2 47
3 47
请。帮帮我。
关于。
答
SELECT *
FROM t2
WHERE t2.idFromt3 NOT IN
(
SELECT LanguageMessageCodeID
FROM t3
)
或
SELECT *
FROM t2
WHERE NOT EXISTS
(
SELECT NULL
FROM t3
WHERE t3.LanguageMessageCodeID = t2.id
)
或
SELECT t2.*
FROM t2
LEFT JOIN
t3
ON t3.LanguageMessageCodeID = t2.id
WHERE t3.LanguageMessageCodeID IS NULL
更新:
试试这个:
SET NOCOUNT ON
DECLARE @t1 TABLE (id INT NOT NULL PRIMARY KEY)
DECLARE @t2 TABLE (t3id INT NOT NULL, t1id INT NOT NULL, PRIMARY KEY (t1id, t3id))
DECLARE @t3 TABLE (id INT NOT NULL)
INSERT
INTO @t1
VALUES (14)
INSERT
INTO @t1
VALUES (44)
INSERT
INTO @t2
VALUES (1, 14)
INSERT
INTO @t2
VALUES (2, 14)
INSERT
INTO @t2
VALUES (1, 44)
INSERT
INTO @t2
VALUES (2, 44)
INSERT
INTO @t2
VALUES (3, 44)
INSERT
INTO @t3
VALUES (1)
INSERT
INTO @t3
VALUES (2)
INSERT
INTO @t3
VALUES (3)
SELECT t1.id, t3.id
FROM @t1 t1
CROSS JOIN
@t3 t3
WHERE NOT EXISTS
(
SELECT NULL
FROM @t2 t2
WHERE t2.t1id = t1.id
AND t2.t3id = t3.id
)
答
如果您想查找连接表中存在不存在的行,则需要使用LEFT OUTER JOIN
。
外连接将导致左表的所有行,无论是否存在右侧的匹配。
为了按那些不存在的过滤,可以为012表的NULL
值添加WHERE
子句检查。
SELECT t3.idFromt3, t3.idFromt1
FROM t3
LEFT OUTER JOIN t2
ON t3.LanguageMessageCodeID <> t2.idFromt2
WHERE t2.idFromts IS NULL
您的第二列读取't3.idFromt1',但是从t3读取?它是否正确?或错字? 't1'在哪里加入? – 2010-11-02 11:01:07