参考表

时间:2015-09-09 08:40:08

标签: mysql sql-server left-join

我在将用户信息从一个地方传送到另一个地方时遇到了一些困难。

有3个表 dbo.gr_usersource dbo.gr_task dbo.gr_user

dbo.gr_task表中,一列填充了与dbo.gr_usersource表中的条目匹配的值,这些条目具有与dbo.gr_user表中的值对应的另一个值。您可以将其称为dbo.gr_taskdbo.gr_user表之间的参考表。

我的查询看起来像这样;

select
      dbo.gr_task.task_number
    , dbo.gr_task.task_name
    , dbo.gr_task.task_description

from dbo.gr_task

left join dbo.gr_user AS Handler
    on dbo.gr_usersource.usersource_user = Handler.user_id
    and dbo.gr_task.task_handler = dbo.gr.usersource.usersource.id

最后一步是在连接工作时从表用户获取列user_name。

2 个答案:

答案 0 :(得分:0)

您在联接中错过了调解员表,请按以下方式使用 -

SELECT dbo.gr_task.task_number,dbo.gr_task.task_name, dbo.gr_task.task_description 
FROM dbo.gr_task AS gt
LEFT JOIN dbo.gr_usersource gus ON gt.task_handler=gus.usersource.id
LEFT JOIN dbo.gr_user AS gu ON gus.usersource_user=gu.user_id;

注意:如果您只想在所有3个表中匹配行,那么您应该使用普通连接而不是左连接。

答案 1 :(得分:0)

这可能对你有用。 请注意,您的选择列表中的联接表中没有列,因此左连接对结果集没有影响。

内部联接将过滤您的结果集,即使您没有返回任何列,也就是强制执行连接条件以匹配两个表中的行。

SELECT
      t.task_number
    , t.task_name
    , t.task_description

FROM dbo.gr_task t

INNER JOIN dbo.gr_usersource us
    ON us.usersource.id = t.task_handler

INNER JOIN dbo.gr_user u
    ON u.user_id = us.usersource_user