基于一个共同值在 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 JOIN
和GROUP 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 中连接两个表的主要内容,如果未能解决你的问题,请参考以下文章