从两个表中选择并在另一个表上执行内部联接时出错

时间:2016-05-15 19:39:14

标签: sql sql-server

SELECT 
    table_comments1.*, table_comments2.* 
FROM 
    [table_comments1], [table_comments2]
INNER JOIN  
    [users] ON [table_comments1].fk_user_id = [users].user_id 
            AND [table_comments2].fk_user_id = [users].user_id
ORDER BY 
    comment_date DESC

我做错了什么?我收到了这个错误:

  

无法绑定多部分标识符“table_comments1.fk_user_id”。

我想最终按日期时间排序来自两个表的所有评论,但是遇到了这个问题。

3 个答案:

答案 0 :(得分:2)

试试这个

      select  t1.*, t2.* 
      from [table_comments1] t1 inner join users u
      on t1.fk_user_id = u.user_id 
      inner join [table_comments2] t2
      on t2.fk_user_id = u.user_id

答案 1 :(得分:-1)

仅供参考join有几种类型。t1 inner join t2 on t1.id = t2.fkId inner(如果ANSI 89或其他任何其他内容被忽略,则为默认值)从t1和t2返回记录,其中t1和t2中存在匹配记录。旧样式(...from t1,t2 where t1.id = t2.fkId)如下所示:t1 left join t2 on t1.id = t2.fkId
null来自t1的所有记录(包括不匹配)和来自t2的匹配的记录存在。来自t2的不匹配记录显示为... from t1,t2 where t1.id *= t2.fkId。旧式:t1 right join t2 on t1.id = t2.fkId
left joinnull类似的逻辑,但所有来自t2和来自t1和...from t1,t2 where t1.id =* t2fkId的匹配记录用于非匹配的t1。旧式:t1 full join t2 on t1.id = t2.fkId

  

null左+右。从t1开始的一切   和t2,from t1,t2 where t1.id *=* t2.fkId用于非匹配。旧式:*=*。   我错了。至少在兼容级别上,ms sql 2008不支持80 t1 cross join t2。我没有旧版本来检查。

on(无Cartesian Product条件)返回两个表中的... from t1,t2。对于来自t1的每条记录来自t2的所有记录。旧式是new 请注意,最近在1992年引入了“新风格”,MS SQL Server 2012停止支持“旧风格”。

答案 2 :(得分:-2)

不确定。但也许你正在寻找类似的东西:

select  table_comments1.*,
        table_comments2.*
from    users as u
inner join table_comments1 as c1
on      u.user_id = c1.fk_user_id
inner join table_comments2 as c2
on      u.user_id = c2.fk_user_id
order by isnull(c1.comment_date, c2.comment_date) desc