简体   繁体   中英

Merge two queries sql into one mapping to POCO

I have two sql queries as follows

SELECT ADGroupName, ADGroupDescription, ADGroupEmail
FROM ADGroup 
WHERE ADGroupName = 'XXXX'

This returns me a single result of information about a particular group.

SELECT ADUser.ADUserFirstName as FirstName, ADUser.ADUserLastName as 
LastName 
FROM ADUser WHERE ADUser.ADUserName 
IN(SELECT ADUser_ADGroup.ADUGUserName 
FROM ADUser_ADGroup 
WHERE ADUser_ADGroup.ADUGGroupName = 'XXXX_Manager')

This returns me a list of Managers for the group I got information about in above query. Is it possible to merge both queries into one sql query?

Whole code is as follow

public AdGroupDto GetGroupByGroupName(string groupName)
{
    var sql = "SELECT ADGroupName, ADGroupDescription, ADGroupEmail " +
     "FROM ADGroup " +
     "WHERE ADGroupName = @0";

    var result = _db.Single<AdGroupDto>(sql, groupName);

    var sqlForTeacher = "SELECT ADUser.ADUserFirstName as FirstName, ADUser.ADUserLastName as LastName " +
    "FROM ADUser WHERE ADUser.ADUserName " +
    "IN(SELECT ADUser_ADGroup.ADUGUserName " +
    "FROM ADUser_ADGroup " +
    "WHERE ADUser_ADGroup.ADUGGroupName = @0)";

    var data = _db.Query<UserInfoDto>(sqlForTeacher, groupName + "_Manager").ToList();

   result.Teachers = data;

    return result;
}

Silke -- Kruse -- ZZA-KL-1A -- Pupils of the ZZA-KL-1A class
Sille -- Dahl -- ZZA-KL-1A -- Pupils of the ZZA-KL-1A class

If I got your tables structure correctly, and assuming you have foreign keys in every table, something like this should solve your problem:

SELECT ADUser.ADUserFirstName AS FirstName, ADUser.ADUserLastName AS LastName, ADGroupName, ADGroupDescription, ADGroupEmail
FROM ADUser
INNER JOIN ADUser_ADGroup ON ADUser.<id> = ADUser_ADGroup.<user_id>
INNER JOIN ADGroup ON ADGroup.<id> = ADUser_ADGroup.<group_id>
WHERE ADGroup.ADGroupName = 'XXXX' AND ADUser_ADGroup.ADUGGroupName LIKE '%Manager%'

Just make sure to use specific column names for the JOIN clauses.

UPD: It's a code for MySQL/MariaDB.

Try this one:

SELECT      U.ADUserFirstName as FirstName, U.ADUserLastName as LastName, G.ADGroupName, G.ADGroupDescription, G.ADGroupEmail, 
FROM        ADUser U
INNER JOIN  ADUser_ADGroup UG ON U.ADUserName = UG.ADUGUserName
INNER JOIN  ADGroup G ON UG.ADUGGroupName = G.ADGroupName + '_Manager'
WHERE       G.ADGroupName = 'XXXX'

This will compare the group name with the ADUser_ADGroup appended with _Manager

Above query is for SQL Server.

If you are using Oracle:

SELECT      U.ADUserFirstName as FirstName, U.ADUserLastName as LastName, G.ADGroupName, G.ADGroupDescription, G.ADGroupEmail, 
FROM        ADUser U
INNER JOIN  ADUser_ADGroup UG ON U.ADUserName = UG.ADUGUserName
INNER JOIN  ADGroup G ON UG.ADUGGroupName = G.ADGroupName || '_Manager'
WHERE       G.ADGroupName = 'XXXX'

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