簡體   English   中英

將兩個查詢sql合並到一個映射到POCO

[英]Merge two queries sql into one mapping to POCO

我有兩個SQL查詢如下

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

這將向我返回有關特定組的信息的單個結果。

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')

這將返回我在上述查詢中獲得有關信息的組的經理列表。 是否可以將兩個查詢合並為一個sql查詢?

整個代碼如下

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-克魯斯-ZZA-KL-1A-ZZA-KL-1A類的學生
Sille-達爾-ZZA-KL-1A-ZZA-KL-1A類的學生

如果我的表結構正確,並且假設您在每個表中都有外鍵,那么類似的方法應該可以解決您的問題:

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%'

只要確保對JOIN子句使用特定的列名即可。

UPD:這是MySQL / MariaDB的代碼。

試試這個:

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'

這將與比較組名ADUser_ADGroup與附加_Manager

以上查詢是針對SQL Server的。

如果您使用的是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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM