首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从多个表中检查哪个表在列中具有想要的值

从多个表中检查哪个表在列中具有想要的值
EN

Stack Overflow用户
提问于 2021-09-10 07:00:39
回答 3查看 73关注 0票数 0

有2-4个表,它们都有"Product_Code“列。

我想看看这些表中哪一张有我要找的"Product_Code“。

代码主要是在一张桌子上。但在特殊情况下,它可以同时放在两张桌子上。我不在乎它给我的是哪一个。我只需要一张有密码的桌子。

我可以使用多个SELECT查询来完成这个任务,但是我想知道是否有更简单的方法。

寻找了一点,但没有得到更多的加入政治家。

提前感谢!

EN

回答 3

Stack Overflow用户

发布于 2021-09-10 07:51:10

您可以使用这样的查询:

代码语言:javascript
复制
Select 'Table1TableName' as TableName, ProductCode from Table1 where ProductCode = @ProductCode
Union
Select 'Table2TableName' as TableName, ProductCode from Table2 where ProductCode = @ProductCode
Union
Select 'Table3TableName' as TableName, ProductCode from Table3 where ProductCode = @ProductCode
Union
Select 'Table4TableName' as TableName, ProductCode from Table4 where ProductCode = @ProductCode

这将给出每一次命中的一行+从何而来的表名。

您也可以使用动态查询,但我认为它不会比这更有效。

票数 1
EN

Stack Overflow用户

发布于 2021-09-10 10:29:26

每个设备都有5-8个筒仓.设备基本上是称重器。每个秤都有它们可以称重的特定成分,但是一些常用的称量器可能在一个以上的秤中。试着弄清楚哪个秤的筒仓里有这个配料,在食谱里我是说从那个秤上拿出那个配料。我没有“意识到”筒仓,我只知道秤上有配料。如果它在其中一个筒仓上有这个成分,它就会知道并拉出这个成分。

让我们假设有一个适当的数据模型:-)这基本上是查询的样子:

代码语言:javascript
复制
select *
from recipe r
join recipe_ingredients ri on ri.recipe_id = r.recipe_id
join weigher_ingredient wi on wi.ingredient_id = i.ingredient_id;

但这可能会给你的成分多倍,是存在于多个秤。我们必须为每种配料挑选一个秤。这样做的一种方法是横向连接,在Server中称为CROSS APPLY

代码语言:javascript
复制
select *
from recipe r
join recipe_ingredients ri on ri.recipe_id = r.recipe_id
join lateral
(
  select top (1) *
  from weigher_ingredient
  where weigher_ingredient.ingredient_id = i.ingredient_id
) wi;

然而,在您的数据库中,没有一个weigher_ingredient表,而是每个秤有一个配料表。让我们将这些称为weigher1_ingredientweigher2_ingredientweigher3_ingredient。然后,查询变成:

代码语言:javascript
复制
select *
from recipe r
join recipe_ingredients ri on ri.recipe_id = r.recipe_id
join lateral
(
  select top (1) *
  from
  (
    select * from from weigher1_ingredient
    union all
    select * from from weigher2_ingredient
    union all
    select * from from weigher3_ingredient
  ) weigher_ingredient
  where weigher_ingredient.ingredient_id = i.ingredient_id
) wi;

正如请求注释中提到的那样,您可以简单地将weigher_ingredient创建为视图。因此,不必合并每个查询中的所有表(也就是说,您将使用我的第二个查询而不是第三个查询)。

这取决于Server的优化器,执行计划的好坏。理想情况下,它将看到我们一次只需要一个ingredient_id,并且希望这个ID上有索引,所以这一行将很快被获取。由于TOP (1),优化器可能会进一步发现,一旦在其中一个表中找到了成分,就可以停止搜索。如果还没有,我们仍然可以希望将来的版本可以:)

票数 1
EN

Stack Overflow用户

发布于 2021-09-10 07:12:52

我认为您可以编写动态sql查询。例如

代码语言:javascript
复制
exec 'select * from '+@tableName+' where Product_Code='+@productCode+''

你可以循环使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69128405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档