带有 WHERE 条件和 INNER JOIN 的 SELECT 命令

Posted

技术标签:

【中文标题】带有 WHERE 条件和 INNER JOIN 的 SELECT 命令【英文标题】:SELECT command with a WHERE condition and an INNER JOIN 【发布时间】:2011-05-03 12:53:42 【问题描述】:

我确定我一定是在这里犯了一个小错误,但我一直在寻找有关此问题的帮助,但我只能找到有关条件 INNER JOIN 的信息。

问题是这个存储过程根本没有返回任何东西。如果我只输入:

SELECT TOP (6) UserID, Category, Title, SUBSTRING(Article, 0, 200) AS Summary, DatePosted
FROM ContribContent
WHERE (DateFeatured IS NOT NULL)
ORDER BY DateFeatured DESC

进入控制台,然后我得到返回的值。所以它必须与内部连接有关? 编辑 >

这个想法是:

    取已被 精选(DateFeatured 不为空) 并将其全部放入临时 表 从 users 表中获取用户名和图片,并使用 UserID 值将它们与临时表中的值进行匹配。 按照每个帖子出现的日期对临时表进行排序。 从表格中选择前六个条目

代码如下:

ALTER PROCEDURE [dbo].[admin_GetFeaturedContrib]
AS
BEGIN

DECLARE @FeaturedContrib TABLE (
 UserID INT,
 Category INT,
 Title varchar(100),
 Summary varchar(200),
 DatePosted date,
 FirstName varchar(50),
 LastName varchar(50),
 Picture varchar(100)
)

INSERT INTO @FeaturedContrib
SELECT TOP 6 ContribContent.UserID, ContribContent.Category, ContribContent.Title,     SUBSTRING(ContribContent.Article, 0, 200) AS Summary, ContribContent.DatePosted,     Users.FirstName, Users.LastName, Users.Picture
FROM ContribContent
INNER JOIN Users
ON ContribContent.UserID = Users.UserID
WHERE ContribContent.DateFeatured IS NOT NULL
ORDER BY ContribContent.DateFeatured DESC

SELECT * FROM @FeaturedContrib
END

涉及到两个数据表:

用户 - 存储所有用户及其信息的表格。

用户ID INT 名字 varchar(50) 姓氏 varchar(50) 图片varchar(50) 等等……

贡献内容

ContribContentID INT 用户ID INT INT 类别 标题 varchar(100) 文章 varchar(MAX) 图片varchar(50) 发布日期 DateFeatured 日期 已删除位

感谢任何可以提供帮助的人!

【问题讨论】:

哇,我真是太愚蠢了。抱歉啊哈,刚刚做了一个编辑。 【参考方案1】:

只运行 -

SELECT TOP 6 ContribContent.UserID, ContribContent.Category, ContribContent.Title,     SUBSTRING(ContribContent.Article, 0, 200) AS Summary, ContribContent.DatePosted,     Users.FirstName, Users.LastName, Users.Picture
FROM ContribContent
INNER JOIN Users
ON ContribContent.UserID = Users.UserID
WHERE ContribContent.DateFeatured IS NOT NULL
ORDER BY ContribContent.DateFeatured DESC

看看你得到的可能是你的Wherejoin 的问题,首先仔细看看你是否有任何数据被返回。我的猜测是 join 看看你是否有匹配的用户 ID 加入...(提示:左加入也许是你的答案)

【讨论】:

不,没有数据返回。我刚刚写了一个快速编辑来回应班尼斯特的评论。如果您在编辑中签出代码,则该代码正在返回值。那么内部连接有问题吗? 哈完美,左连接有效,但为连接的列返回空值。我决定检查用户表,发现用户 ID 出于某种原因从 5 开始。唯一被推荐​​的内容的 UserID 值为 2。我很难过这是一个愚蠢的错误。我从另一个开发者那里接管了这个网站,所以我不知道。非常感谢。 另外,可能想使用Isnull(ContribContent.UserID,0) as UserId 并分配一个适合您需求的值(在这种情况下是0)。很高兴我能提供帮助!

以上是关于带有 WHERE 条件和 INNER JOIN 的 SELECT 命令的主要内容,如果未能解决你的问题,请参考以下文章

Oracle中Inner join和Where的区别

SQL: LEFT JOIN , RIGHT JOIN , INNER JOIN 区别 , on 和 where条件的区别

Oracle中Inner join和Where的区别

带有 WHERE 子句和 INNER JOIN 的 MySQL 更新查询不起作用

mysql的inner join,left jion,right join,cross join以及on和where的区别

带有 WHERE 子句的 SQL INNER JOIN 到 LINQ 格式