【问题标题】:How to compare two different tables' columns and matched columns fetch all rows from table one?如何比较两个不同表的列和匹配的列从表一中获取所有行?
【发布时间】:2019-10-02 11:26:22
【问题描述】:

我正在比较两个表的单列和匹配的列获取所有行

select *
from t_registered_std_info
where t_registered_std_info.t_ds_name == attendance.std_name

【问题讨论】:

  • 您使用的是 MS SQL Server 还是 SQlite?
  • 向我们展示一些示例表数据和预期结果 - 全部为格式化文本(即无图像)。
  • 考虑到 OP 正在使用==怀疑后者@jarlh,因为== 不是有效的T-SQL。 (但我不知道 SQLite 中是否允许 ==
  • @Larnu,我知道,但它是有效的 SQLite 语法吗?
  • 不知道,我只是在编辑我的评论以提及这一点。但如果是这样,人们会期望 OP 让我们知道该声明出现错误。 :)

标签: sql sql-server sqlite


【解决方案1】:

您缺少参加餐桌的连接,并且还有一个额外的 = 登录 where 部分。

SELECT * 
FROM t_registered_std_info 
INNER JOIN attendance 
    ON -- Please define the relation
WHERE t_registered_std_info.t_ds_name = attendance.std_name

【讨论】:

  • 我认为t_registered_std_info.t_ds_name = attendance.std_name 是他们想要的ON 子句。
  • 是的..可能。
【解决方案2】:

看起来你想做IN另一张桌子:

select *
from t_registered_std_info
where t_registered_std_info.t_ds_name IN (select attendance.std_name from attendance)

【讨论】:

    【解决方案3】:

    如果您想要“table1”中的所有行与“table2”中的匹配值,请使用left join

    select *   -- you should list the columns you want here
    from t_registered_std_info rsi left join
         attendance a
         on rsi.t_ds_name = rsi.std_name
    

    注意事项:

    • 所有表引用都需要在select 查询的from 子句中。您不能“只”在任何地方引用表格。
    • 用于相等的 SQL 运算符是 =,而不是 ==,尽管有些数据库确实可以识别后者。
    • from 子句中组合多个表时,请使用显式JOIN 语法。
    • 如果您只需要其中一个表中的列,那么existsin 等替代方法可能是合适的。

    【讨论】:

    • 我会说相反的。在这里使用INNER JOIN
    • @jarlh 。 . .问题的标题包括“从表一中获取所有行”。
    猜你喜欢
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多