【问题标题】:How to make a join only on selected values of a column on another table in sql如何仅对sql中另一个表上的列的选定值进行连接
【发布时间】:2021-03-11 20:28:33
【问题描述】:

您好,我有一个主表 table1,其中有 n 列,列名称为 R_Id 此列是主键 (Id)在另一个表 table2 中。我想进行连接,以便保留 table1 的所有值和列,但过滤 R_Id 为 13、3 和 4 的 table1

简单地说,我可以试试这个,即

select * from table1 
where table1.R_Id in (13, 3, 4)

但这会根据这三个值过滤整个 table1。我想保留 table1 及其所有值并仅过滤此特定列。我尝试了类似的方法,但它不起作用

select * from table1 t1
left join table2 t2 on t1.R_Id = t2.Id
where t1.R_Id in (13, 3, 4)

但不幸的是,这不起作用。

【问题讨论】:

标签: mysql sql join


【解决方案1】:

您必须在ON 子句中设置条件,以便返回table1 的所有行,但只有t1.R_Id IN (13, 3, 4) 的行连接到table2

SELECT * 
FROM table1 t1 LEFT JOIN table2 t2 
ON t1.R_Id = t2.Id AND t1.R_Id IN (13, 3, 4)

【讨论】:

  • 感谢您的回复,但如果我还想从 table1 中删除 R_Id 不在 13、3、4 中的所有行怎么办
  • @MurtazaBasu 这就是 WHERE 子句的作用,而您在问题中说您不想要它。
  • 我想要的是保留 table1 及其所有行,但只删除 R_Id 的值不是 13、3、4 的那些行
  • @MurtazaBasu 所以你不想要 table1 的所有行。您只需要 R_Id 等于 13 或 3 或 4 的行。那么为什么 where table1.R_Id in (13, 3, 4) 不起作用?
  • 因为它会删除 table1 中的所有其他行,并且只返回 table1.R_Id 为 13、3 或 4 的那些行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-09
  • 1970-01-01
  • 1970-01-01
  • 2015-05-03
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多