在同一列上多次加入

时间:2016-10-10 06:35:42

标签: sql join stored-procedures

我有两个表,一个是category表,字段为

id , name, created_by, created_date, modify_by, modify_date, status

(请注意created_by& modify_by将包含来自用户表的用户ID)

和其他表格user,其中列为

id, name, role and many more

我必须在网页上列出类别,其中包含创建新类别的用户的名称以及修改类别的用户的名称

我正在使用以下SQL查询来获取created_by用户名,还使用modify_by用户名来显示在列表中

BEGIN
     SELECT cat.id,cat.name, cate.name as parentname, cat.parent_id,
     cat.created_by, cat.created_date, cat.modify_by, cat.modify_date, 
     user.firstname
     FROM `category`as cat     
     INNER JOIN `user` ON cat.created_by = user.id
     LEFT JOIN category as cate ON cate.id = cat.parent_id;
END

我应该在此查询中添加什么来从其id获取amemodifier用户n,这可能与创建者ID不同?

或者我是否必须为获取修饰符名称编写单独的查询?

3 个答案:

答案 0 :(得分:0)

只需添加另一个具有不同表别名的用户连接即可。

int main(){
    int n;
    cin >> n;
    vector<int> arr(n);
    for(int i =0; i < n; i++){
       cin >> arr[i];
    }
    for(int i = n-1; n-1 >= 0; i--){
       cout << " "<< arr[i] << " ";
    }
    return 0;
} 

答案 1 :(得分:0)

您需要使用不同的别名对该表进行两次连接。

from ctypes import *

libc = cdll.msvcrt
libc.pow.argtypes = [c_double, c_int]
libc.pow.restype = c_double
libc.pow(2.3, 2)

答案 2 :(得分:0)

如果没有错,您需要加入USER表两次

SELECT cat.id,
       cat.NAME,
       cat.NAME   AS parentname,
       cat.parent_id,
       cat.created_by,
       cat.created_date,
       cat.modify_by,
       cat.modify_date,
       c.firstname AS created_user,
       m.firstname AS modified_user
FROM   categoryas cat
       LEFT JOIN USER c
              ON cat.created_by = c.id
       LEFT JOIN USER m
              ON cat.modify_by = m.id; 

如果created_by列永远不会是NULL,那么您可以将LEFT JOIN USER c更改为INNER JOIN USER c