2010-11-01 31 views
4

Je suis sûr que je dois faire une erreur triviale ici, mais j'ai cherché de l'aide pour ce problème et tout ce que je peux trouver est des informations sur les INNER JOIN conditionnelles.Commande SELECT avec une condition WHERE et un INNER JOIN

< EDIT> Le problème est que cette procédure stockée ne retourne rien du tout. Si je tape juste:

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

Dans la console puis j'obtiens des valeurs retournées. Donc ça doit être quelque chose à voir avec la jointure interne? </EDIT>

L'idée est de:

  1. prendre le contenu qui a été en vedette (DateFeatured est NOT NULL) et placez le tout dans une table temporaire
  2. obtenir le les noms d'utilisateur et l'image de la table des utilisateurs et les associent aux valeurs de la table temporaire en utilisant la valeur UserID.
  3. trier la table temporaire dans l'ordre de la date à laquelle chaque poste a été présenté.
  4. sélectionner les six premières entrées de la table

Voici le code:

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 

Il y a deux tables de données impliquées:

Utilisateurs - une table stockant tous les utilisateurs et leurs informations.

  • UserID INT
  • FirstName varchar (50)
  • LastName varchar (50)
  • Photo varchar (50)
  • etc ...

ContribContent

  • ContribContentID INT
  • UserID INT
  • Catégorie INT
  • Titre varchar (100)
  • Article VARCHAR (MAX)
  • Photo varchar (50)
  • Date DatePosted
  • Date DateFeatured
  • bit supprimé

MERCI à tous ceux qui peuvent aider!

+5

Et le problème est ...? –

+1

Drumroll ........ – Vishal

+0

Wow c'était stupide de ma part .. Désolé aha, juste fait un montage. – mitchellbutler

Répondre

2

Exécuter seulement -

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 

Voir ce que vous obtenez peut-être un problème avec votre Where ou votre join voir attentivement si vous avez des données en premier lieu retourné. Je devine est join voir si vous avez des ID utilisateur correspondants que vous rejoignez sur ... (Indice: Left join peut-être votre réponse)

+0

Non, aucune donnée n'a été retournée. Je viens d'écrire une modification rapide en réponse au commentaire de Bannister. Si vous extrayez le code dans l'édition, ce code renvoie des valeurs. Alors est-ce que quelque chose ne va pas avec la jointure interne alors? – mitchellbutler

+0

Hah parfait, la jointure gauche a fonctionné, mais renvoyait des zéros pour les colonnes jointes. J'ai décidé de vérifier la table des utilisateurs et j'ai découvert que les UserID commencent à 5 pour une raison quelconque. Le seul contenu qui avait été présenté avait une valeur UserID de 2. Je me sens mal que c'était une erreur stupide. Je reprends ce site d'un autre développeur donc je n'étais pas au courant. Merci beaucoup. – mitchellbutler

+0

Aussi, Vous voulez probablement utiliser 'Isnull (ContribContent.UserID, 0) en tant qu'utilisateur UserId' et attribuer une valeur (' 0' j'ai dans ce cas) approprié à vos besoins.J'ai pu aider! – Vishal