SQL Server:INNER JOIN返回错误的行

时间:2014-10-28 15:24:21

标签: sql-server-2008

我有两张表PersonTable1。我想将person表加入table1 foodId所在的foodId

但是,当我进行内连接时,它只加入Person为1的记录。

id fName lName 1 John Smith

Table1

id personId foodId date 1 1 1 2014-10-28 2 1 2 2014-10-28

SELECT *
FROM Person p
INNER JOIN Table1 t ON p.id = t.personId AND foodId = 2

我试过的查询是:

SELECT *
FROM Person p
INNER JOIN Table1 t ON p.id = t.personId 
WHERE t.foodId = 2

我也尝试过:

{{1}}

这两个查询都显示空结果。

任何建议都将不胜感激!

3 个答案:

答案 0 :(得分:1)

SQLFiddle似乎已经死了......无法连接 - 因此,张贴在这里的所有荣耀......

原始问题中显示的设置:

DECLARE @Person TABLE (id INT, fName VARCHAR(20), lName VARCHAR(50))

INSERT INTO @Person
        (id, fName, lName)
VALUES
        (1, -- id - int
         'John', -- fName - varchar(20)
         'Smith'  -- lName - varchar(50)
         )

DECLARE @Table1 TABLE (id INT, PersonId INT, FoodID INT, T1Date DATE)

INSERT INTO @Table1
        (id, PersonId, FoodID, T1Date)
VALUES
        (1, -- id - int
         1, -- PersonId - int
         1, -- FoodID - int
         '20141028'  -- T1Date - date
         ), (2, 1, 2, '20141027')

原始问题中显示的查询#2:

SELECT *
FROM @Person p
INNER JOIN @Table1 t ON p.id = t.personId 
WHERE t.foodId = 2

该查询的输出:

enter image description here

此处必定还有其他内容 - 或者您已经过度简化了设置,使其无法正常工作。但是您的查询#2 DOES 会返回一行 - 您期望的那一行。

答案 1 :(得分:0)

也许你需要左连接而不是内连接。

SELECT * FROM Table1 t LEFT JOIN Person p ON p.id = t.personId WHERE t.foodId = 2

答案 2 :(得分:0)

当您进行内部联接时,只会显示两个表中存在的记录。

我喜欢这张照片 enter image description here