【问题标题】:Comparing two tables with different values比较具有不同值的两个表
【发布时间】:2019-10-31 04:00:07
【问题描述】:

我在同一服务器上的不同数据库中有两个表...在 SQL 中有多个列。

我需要获取我使用的一列的值存在于 TableA 而不是 TableB 中的记录。此列在 TableA 中是字母数字 (BIGINT),而在 TableB 中是不同的,它是 ShortDescription(varchar(100))

TableB 列的值仅是与 Table A 列相同但没有字符(例如 123)的数字,而 TableA 列值可以包含例如“ab123”

现在,如果表 A 中的值“abc123”出现在表 A 中,而值“123”不在表 B 中,那么我应该从表 A 中获取该记录。如果表 B 中的该列存在 123,那么我不应该获取。

怎么办?

【问题讨论】:

  • 请提供一些示例数据和预期结果。

标签: sql sql-server sql-server-2016


【解决方案1】:

您需要 PATINDEX 从 TableA.Column1 中查找数字,然后将其与 TableB.Column2 匹配。以下是您的查询:

Select Column1 FROM TableA WHERE EXISTS (SELECT 1 From TableB WHERE SUBSTRING(CAST(Column1 AS VARCHAR), PATINDEX('%[0-9]%', CAST(Column1 AS VARCHAR)), LEN(Column1))=列2)

我假设您在两个表之间没有公共列。否则,您可以使用公共列连接并将 PATINDEX 语句放在 WHERE 子句中。

【讨论】:

  • 你很亲密,但不确定这是否正是我想要的。让我试试
  • 我在“LEN(Column1)=Column2)”中得到几乎相等的语法错误
  • 我有公共栏目(其他栏目)。
  • 我们需要一些选角。我已经更新了答案。
  • 对不起,看起来不错,你是对的。我的查询仍在运行,稍后通知您:)
【解决方案2】:

试试这个查询。通过连接两个表,然后使用WHERE 子句,它使事情变得简单。我只是将两个表之间的公共列称为“Id”以进行连接:

SELECT * FROM TableA 
LEFT JOIN TableB ON TableA.Id = TableB.Id 
WHERE TableA.Column1 = "ab123" AND TableB.ShortDescription != "123";

【讨论】:

  • 不,如果你有价值,那很容易,但我没有那个价值。我想获得满足场景而不是条件本身的记录。
  • @Learner 你能详细说明你的意思吗?我有点困惑。
猜你喜欢
  • 2021-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-02
  • 2017-08-06
  • 1970-01-01
相关资源
最近更新 更多