sql - T SQL 根据来自另一个 Select 的值选择表
问题描述
我有以下选择,它检索所有以“ABC_”开头的表:
SELECT *
FROM information_schema.tables
WHERE table_name LIKE 'ABC_%'
所有“ABC_”表都包含一个名为“SKU”的字段。
我有另一个 SELECT 检索 SKU 列表:
SELECT SKU from tblProducts
如何从 tblProducts 返回包含至少一个 SKU 的“ABC_”表列表?
解决方案
只需要一点动态 SQL 魔法:
使用您需要的表创建一个联合所有查询,每个内部查询都带有 awhere exists
以确保其中至少一行具有sku
也在tblproduct
表中的值:
DECLARE @Sql nvarchar(max) = '';
SELECT @Sql = @Sql +N'UNION ALL SELECT '''+ table_name +N''' As TableName FROM '+ QUOTENAME(table_name) +
N' As P WHERE EXISTS (SELECT 1 FROM tblProducts WHERE tblProducts.Sku = P.Sku) '
FROM information_schema.tables
WHERE table_name LIKE 'ABC_%'
-- Remove the first "UNION ALL"
SELECT @Sql = STUFF(@Sql, 1, 10, '')
-- When dealing with Dynamic SQL, Print is your best friend
PRINT @Sql
-- Unremark once you check the printed SQL is what you wanted
--EXEC(@SQL)
推荐阅读
- laravel - Laravel Socialite - SocialiteProvider Microsoft Graph 和 Microsoft Azure 之间的区别
- python - 如何在播放视频时通过 PyQt 从眼动仪中绘制眼动数据
- strapi - STRAPI 正在剪切最后 3 个字符
- jquery - Laraver 数据库查询
- ajax - Ajax 自动完成功能在 Laravel 6 中无法正常工作
- flutter-web - 在 Flutter Web 中使用 js 库
- excel - 如何应用 Application.ShortcutMenus 以便在右键单击表格时仍然出现宏?
- c# - 如何将数据从 SQL 数据库字段类型(nvarchar)同步到 Dynamics CRM 字段类型(查找)
- apache-spark - 在 Databricks 中设置驱动程序内存配置
- r - 行号以更快的方式按特定条件增加 R