2013-08-21 56 views
0

我有5個表中的複雜選擇語句, 我想避免具有與其中一個表具有相同字段值的重複行。從多個表中選擇不重複

SELECT role_enname 
      ,lu_app_operations.operation_enname 
      , lu_applications.app_enname 
      , lu_app_oper_groups.oper_group_enname 
FROM app_operation_roles 
     ,roles 
     ,lu_app_operations 
     ,lu_applications 
     ,lu_app_oper_groups 
WHERE app_operation_roles.role_id=roles.role_id 
AND app_operation_roles.app_operation_id=lu_app_operations.app_operation_id 
AND roles.app_id=lu_applications.app_id 
AND lu_app_operations.app_oper_group_id=lu_app_oper_groups.app_oper_group_id 
AND app_operation_roles.retired =0 
AND roles.retired    =0 

在此查詢我不基於lu_app_operations.operation_enname

回答

0

使用DISTINCT關鍵字顯示重複行:

SELECT DISTINCT role_enname, <rest of your query> 
0

使用不同的關鍵字如下

SELECT DISTINCT role_enname,lu_app_operations.operation_enname, lu_applications.app_enname, 
lu_app_oper_groups.oper_group_enname 
FROM app_operation_roles,roles,lu_app_operations,lu_applications,lu_app_oper_groups 
WHERE app_operation_roles.role_id=roles.role_id 
AND app_operation_roles.app_operation_id=lu_app_operations.app_operation_id 
AND roles.app_id=lu_applications.app_id 
AND lu_app_operations.app_oper_group_id=lu_app_oper_groups.app_oper_group_id 
AND app_operation_roles.retired =0 AND roles.retired    =0 
0

也許你可以使用Distinct和Group by來獲得結果,但請記住,加入多個表格,最好的辦法是仍然使用JOIN代替AND

SELECT DISTINCT role_enname 
     ,lu_app_operations.operation_enname 
     , lu_applications.app_enname 
     , lu_app_oper_groups.oper_group_enname 
FROM app_operation_roles 
,roles 
,lu_app_operations 
,lu_applications 
,lu_app_oper_groups 
WHERE app_operation_roles.role_id=roles.role_id 
AND app_operation_roles.app_operation_id=lu_app_operations.app_operation_id 
AND roles.app_id=lu_applications.app_id 
AND lu_app_operations.app_oper_group_id=lu_app_oper_groups.app_oper_group_id 
AND app_operation_roles.retired =0 
AND roles.retired    =0 
GROUP BY role_enname, 
lu_app_operations.operation_enname, 
lu_applications.app_enname, 
lu_app_oper_groups.oper_group_enname 
0
SELECT distinct role_enname,lu_app_operations.operation_enname, lu_applications.app_enname,lu_app_oper_groups.oper_group_enname 
FROM app_operation_roles,roles,lu_app_operations,lu_applications,lu_app_oper_groups 
WHERE app_operation_roles.role_id=roles.role_id 
AND app_operation_roles.app_operation_id=lu_app_operations.app_operation_id 
AND roles.app_id=lu_applications.app_id 
AND lu_app_operations.app_oper_group_id=lu_app_oper_groups.app_oper_group_id 
AND app_operation_roles.retired =0 
AND roles.retired =0