Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 784
  • Last Modified:

SQL error: "expression of non-boolean type specified in a context where a condition is expected, near 'WHERE'"

I had this question after viewing Need Distinct Value from Joined Tables in MSSQL.

With this SQL query, I am trying to match the faculty members with their topics. The user is presented with a dropdown of Research Topics, When selected, the user should be presented with a list of faculty members who are working in research on those topics.

My Query:

SELECT First_Name, Last_Name, Department_Name, suapp.FACULTY.Faculty_UUID, Faculty_Email, Faculty_Title, Faculty_Profile_Link FROM suapp.FACULTY            
JOIN (SELECT DISTINCT
suapp.RESEARCH_MATCH.Faculty_UUID
FROM suapp.RESEARCH_MATCH
JOIN suapp.AREA_TOPIC.Area_Topic_Code
ON suapp.RESEARCH_MATCH.Area_Topic_Code
WHERE suapp.RESEARCH_MATCH.Area_Topic_Code = suapp.AREA_TOPIC.Area_Topic_Code
AND suapp.AREA_TOPIC.Area_Topic_Code = 'CD-a'
) rm ON suapp.FACULTY.Faculty_UUID = rm.Faculty_UUID ORDER BY suapp.FACULTY.Last_Name, suapp.FACULTY.First_Name;

The error:
An expression of non-boolean type specified in a context where a condition is expected, near 'WHERE'.

suapp-research-dashboard-example-deb.pdf
Thank you for any help in this situation.
Debra Turner
0
Debra Turner
Asked:
Debra Turner
  • 3
  • 2
1 Solution
 
ste5anSenior DeveloperCommented:
First of all, please use the embed CODE button..

The issue is a copy'n'paste error. You have simply a WHERE where none is needed. E.g.

SELECT  First_Name ,
        Last_Name ,
        Department_Name ,
        suapp.FACULTY.Faculty_UUID ,
        Faculty_Email ,
        Faculty_Title ,
        Faculty_Profile_Link
FROM    suapp.FACULTY
        JOIN ( SELECT DISTINCT
                        suapp.RESEARCH_MATCH.Faculty_UUID
               FROM     suapp.RESEARCH_MATCH
                        JOIN suapp.AREA_TOPIC.Area_Topic_Code ON suapp.RESEARCH_MATCH.Area_Topic_Code = suapp.AREA_TOPIC.Area_Topic_Code
                                                                 AND suapp.AREA_TOPIC.Area_Topic_Code = 'CD-a'
             ) rm ON suapp.FACULTY.Faculty_UUID = rm.Faculty_UUID
ORDER BY suapp.FACULTY.Last_Name ,
        suapp.FACULTY.First_Name;

Open in new window


btw, please use table alias names and qualify all used column names with it.
1
 
Ray PaseurCommented:
I think the JOIN ... ON needs to have some kind of equality expression in the ON clause.  This is just a guess, but maybe something along these lines:

JOIN suapp.AREA_TOPIC.Area_Topic_Code
ON suapp.RESEARCH_MATCH.Area_Topic_Code = suapp.AREA_TOPIC.Area_Topic_Code
1
 
Debra TurnerWeb Specialist IIAuthor Commented:
Dear Stefan,
Thank you for your quick response. I am getting new errors with these changes.

Invalid object name 'suapp.AREA_TOPIC.Area_Topic_Code'

And I'm not sure what you mean by:
"btw, please use table alias names and qualify all used column names with it"
Thank you for your help.
debra
0
A proven path to a career in data science

At Springboard, we know how to get you a job in data science. With Springboard’s Data Science Career Track, you’ll master data science  with a curriculum built by industry experts. You’ll work on real projects, and get 1-on-1 mentorship from a data scientist.

 
Debra TurnerWeb Specialist IIAuthor Commented:
Dear Ray,

I changed my query to reflect your example and am now getting a new error.
Error
Msg 208, Level 16, State 1, Line 1
Invalid object name 'suapp.AREA_TOPIC.Area_Topic_Code'.

SELECT First_Name, Last_Name, Department_Name, suapp.FACULTY.Faculty_UUID, Faculty_Email, Faculty_Title, Faculty_Profile_Link FROM suapp.FACULTY            
JOIN (
SELECT DISTINCT
suapp.RESEARCH_MATCH.Faculty_UUID
FROM suapp.RESEARCH_MATCH
JOIN suapp.AREA_TOPIC.Area_Topic_Code
ON suapp.RESEARCH_MATCH.Area_Topic_Code = suapp.AREA_TOPIC.Area_Topic_Code
WHERE suapp.RESEARCH_MATCH.Area_Topic_Code = suapp.AREA_TOPIC.Area_Topic_Code
AND suapp.AREA_TOPIC.Area_Topic_Code = 'CD-a'
) rm ON suapp.FACULTY.Faculty_UUID = rm.Faculty_UUID ORDER BY suapp.FACULTY.Last_Name, suapp.FACULTY.First_Name;

With your suggestion, the above is my new query that is getting the error (inside the sql console)
Thank you for your help.
debra
0
 
ste5anSenior DeveloperCommented:
Yup, there is another problem. You "joined" a column instead of a table.

This should do it:
SELECT  F.First_Name ,
        F.Last_Name ,
        F.Department_Name ,
        F.Faculty_UUID ,
        F.Faculty_Email ,
        F.Faculty_Title ,
        F.Faculty_Profile_Link
FROM    suapp.FACULTY F
        INNER JOIN ( SELECT DISTINCT
                            RMI.Faculty_UUID
                     FROM   suapp.RESEARCH_MATCH RMI
                            INNER JOIN suapp.AREA_TOPIC [AT] ON RMI.Area_Topic_Code = [AT].Area_Topic_Code
                                                                AND [AT].Area_Topic_Code = 'CD-a'
                   ) RM ON F.Faculty_UUID = RM.Faculty_UUID
ORDER BY F.Last_Name ,
        F.First_Name;

Open in new window


btw, an EXIST is in this case sometimes better (no DISTINCT necessary):
SELECT  F.First_Name ,
        F.Last_Name ,
        F.Department_Name ,
        F.Faculty_UUID ,
        F.Faculty_Email ,
        F.Faculty_Title ,
        F.Faculty_Profile_Link
FROM    suapp.FACULTY F
WHERE   EXISTS ( SELECT *
                 FROM   suapp.RESEARCH_MATCH RMI
                        INNER JOIN suapp.AREA_TOPIC [AT] ON RMI.Area_Topic_Code = [AT].Area_Topic_Code
                                                            AND [AT].Area_Topic_Code = 'CD-a'
                                                            AND F.Faculty_UUID = RM.Faculty_UUID )
ORDER BY F.Last_Name ,
        F.First_Name;

Open in new window

1
 
Debra TurnerWeb Specialist IIAuthor Commented:
Awesome. Thank you for the help!
Debra
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now