当前位置: 首页 > 面试题库 >

SQL连接,2个表,相同的字段

郝哲茂
2023-03-14
问题内容

我有2张桌子。为了简化:

表1,用户:

userId int,userName nvarchar(50)

表2消息:

msgId int,msgFrom int,msgTo int …

msg1和msg2都包含userId。现在,我想获取所有消息,但是我想要用户名而不是msgFrom。我知道该怎么办:

    select tabMessages.*, tabUsers.userName as Sender 
      from tabMessages 
inner join tabUsers on msgFrom=userId 
where msgId = @someParameter;

一切正常,花花公子。获取用户名而不是msgTo的方法相同。现在的问题是,如何在同一调用中同时获取两个字段?我想得到桌子

msgId,msgFrom,msgTo,发件人,收件人。我尝试过:

    select tabMessages.*, tabUsers.userName as Sender, 
           tabUsers.userName as Recipient 
      from tabMessages 
inner join tabUsers on msgFrom=userId and msgTo=userId 
     where msgId = @someParameter;

但这是行不通的。我正在使用sql2000女士。


问题答案:

使用不同的别名两次联接用户表。首先连接到from列,然后连接到to列。

select m.*, u1.userName as Sender, u2.userName as Recipient 
from tabMessages as m 
  inner join tabUsers as u1 
    on u1.userId=m.msgFrom 
  inner join tabUsers as u2 
    on u2.userId=m.msgTo 
where m.msgId = @someParameter;


 类似资料:
  • 问题内容: 我有两个表,它们的列数是可变的。(我不知道有多少列或名称会是什么),例如表A和表B。 表A: 表B 询问: 当TableA和TableB都具有相同名称的列时,我无法区分两个不同的列。例如,两个表都有“名称”列,此查询将导致: 我正在寻找一种区分两个表的方法。最好使用预定义的列名称,例如。 我知道“ AS”关键字,但是问题是我不知道这些列名称将是什么。(我不知道TableA或TableB

  • 我需要一些关于mysql查询的帮助。 我有两张桌子, 正确的排序必须是: 1)光-3(3票) 2)光-2(2票) 2)光-1(2票) 2)光-4(1票)

  • 我试图用SPARK SQL编写一个查询,执行三个表的联接。但是查询输出实际上是。它适用于单人餐桌。我的联接查询是正确的,因为我已经在oracle数据库中执行了它。我需要在这里附加什么更正?Spark版本是2.0.0。 我在一些网页上发现了下面的说明,但它仍然不起作用:

  • 我有一个列为col1-col10的表tablename。并非每一行都填充了col4,但每一行都填充了col1、col2、col3。我想在col4满足条件时获取所有{col1,col2,col3}元组,然后从tablename中获取与元组{col1,col2,col3}匹配的所有行。 我不确定是否应该使用内部联接、左联接或其他方式?(我认为内部连接和左连接都应该给我相同的结果)下面的查询给了我一个语

  • 我当前的代码: 但是我要一个java。lang.IllegalArgumentException。 我需要的是在用户表中显示一列。 类似于但是帐户实体没有只有User实体才有的getName()。 *更新 这就是错误所在 Java语言lang.IllegalArgumentException:在EntityManager中创建查询时发生异常:异常描述:语法错误分析查询[SELECT a Accou

  • 问题内容: 我的MySQL数据库中有这些表: 通用表: Facebook表: 首席表: 基本上,常规表包含一些( 显然 )常规数据。基于generalTable.scenario,您可以在其他两个表中查找更多详细信息,这些表在某些熟悉的列中(例如,expiresAt),而在其他一些列中则不然。 我的问题是,如何仅通过一个查询就可以获取generalTable和正确的明细表的联接数据。 所以,我想这