基于一个共同值在 SQL 中连接两个表

Posted

技术标签:

【中文标题】基于一个共同值在 SQL 中连接两个表【英文标题】:joining two tables in SQL based on one common value 【发布时间】:2021-07-19 20:07:43 【问题描述】:

我的 SQL 数据库中有两个表。我需要创建一个报告,根据我输入的 lngItemID 向我显示 strStoredAcctID。执行搜索时,我只知道 41139320 号码。我不知道如何根据我拥有的信息组合这两个查询。这是我使用的查询。

SELECT  tblItem.lngItemID, tblItem.lngEntitleItemIDRef
FROM tblItem   
WHERE   tblItem.lngEntitleItemIDRef = 41139320  

SELECT tblStoredValue.lngItemID, tblStoredValue.strStoredAcctID
FROM tblStoredValue
WHERE tblStoredValue.lngItemID = 41886227  

我希望能够只输入 lngItemID = 41139320 并接收 strStoredAcctID,而不是运行两个。非常感谢任何帮助。

【问题讨论】:

如果你加强你的查询,你也许可以用一个简单的联合来解决 【参考方案1】:

试试这个,它使用第一个查询的结果集来过滤引用查询的数据,这称为子查询-https://docs.microsoft.com/en-us/sql/relational-databases/performance/subqueries?view=sql-server-ver15

SELECT tblStoredValue.lngItemID, tblStoredValue.strStoredAcctID 
FROM tblStoredValue 
WHERE tblStoredValue.lngItemID IN (
    SELECT tblItem.lngItemID
    FROM tblItem
    WHERE tblItem.lngEntitleItemIDRef = 41139320
)

【讨论】:

您能解释一下为什么简单的INNER JOINGROUP BY 不起作用吗? GROUP BY 因为我不确定第一个查询结果可能有多个对应的下一个查询结果。 @devlincarnate 很高兴你能告诉我你会怎么做? 谢谢!我收到以下错误:“当不使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式。” 现在已经解决了,抱歉!再试一次【参考方案2】:

这应该可以解决问题JOIN

SELECT tblStoredValue.strStoredAcctID FROM tblItem
LEFT JOIN tblStoredValue on tblItem.lngItemID=tblStoredValue.lngItemID
WHERE tblItem.lngEntitleItemIDRef = 41139320

【讨论】:

OP 声明期望的结果是只得到strStoredAcctID 容易修复:)【参考方案3】:

试试这个:

SELECT tblStoredValue.strAcctID
FROM tblItem
INNER JOIN tblStoredValue ON tblStoredValue.lgnItemID = tblItem.lgnItemID
WHERE tblItem.lgnEntitleItemIDRef = 41139320

【讨论】:

谢谢!当我运行查询时,我确实得到了两条记录。一个带有 strStoredAcctID,另一个为 NULL。老实说,这很好,我可以忍受。

以上是关于基于一个共同值在 SQL 中连接两个表的主要内容,如果未能解决你的问题,请参考以下文章

基于最近时间戳连接两个表的 SQL 查询

SQL的各种连接Join详解

基于 SQL 查询中最接近的文本匹配连接表?

组合 SQL 查询,基于计算连接表

多表合并且去掉重复项

数据库力扣题组合两个表