简体   繁体   中英

How to make this join with a TSQL query?

I have a table called USERS that has a foreign key to the table GROUPS (a user can pertain to one or none GROUPS ). The table USERS also contains a column ISDELETED (a char column with T or F ).

I need a query to retrieve all the GROUPS and all the USERS that are not deleted, if all the users in a GROUP are deleted or no users are defined I need the query to return NULL for that GROUP .

I tried with the following query:

SELECT     GROUPS.*, USERS.*
FROM       GROUPS INNER JOIN
                  USERS ON GROUPS.ID = USERS.GROUPID
WHERE USERS.ISDELETED = 'F'

But this query does not returns the groups that are empty. SQL and me are not the best friends in world, some help will be great, thanks.

If you want all the groups, regardless of a match in the users table, you should use a left outer join:

SELECT     GROUPS.*, USERS.*
FROM       GROUPS 
           LEFT OUTER JOIN
           USERS 
           ON GROUPS.ID = USERS.GROUPID AND USERS.ISDELETED = 'F'

You should just need to do a left outer join -

SELECT     GROUPS.*, USERS.*
FROM       GROUPS LEFT OUTER JOIN
                  USERS ON GROUPS.ID = USERS.GROUPID
WHERE USERS.ISDELETED = 'F'

Here's a reference I like to use to remind myself of the differences in sql joins.

您需要使用LEFT OUTER JOIN运算符而不是INNER JOIN

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM