使用嵌套查询从表列表/多个表中选择 - MS SQL

Posted

技术标签:

【中文标题】使用嵌套查询从表列表/多个表中选择 - MS SQL【英文标题】:Select from list of tables / multiple tables with nested query - MS SQL 【发布时间】:2020-09-29 04:47:20 【问题描述】:

不确定这是否有一个简单的答案,但我基本上是在尝试这样做:

select id
from (select table_name from information_schema.columns where column_name = 'id') 
where id = 1234

所以将表格列表传入 FROM。

我正在尝试检查所有存在此列的表,如果它们的匹配值为 1234。

并且不输入 31 次,从 table1 中选择,从 table2 中选择等等

而且不用做一堆连接。

可能吗?

【问题讨论】:

可以使用存储过程,但我相信不能使用纯 SQL!即您需要“动态 SQL”而不是“静态 SQL”。 请标记正在使用的数据库 您使用的是哪种 DBMS 产品? “SQL”只是所有关系数据库使用的一种查询语言,而不是特定数据库产品的名称 - 由于您需要动态 SQL,因此这是高度特定于供应商的。请为您正在使用的数据库产品添加tag。 Why should I tag my DBMS 非常感谢大家,我知道从这里去哪里! 【参考方案1】:

我写了这个存储过程。

我知道这很糟糕,我以前从未在 tsql(teesquill?)中写过任何东西,而我的目标只是得到一些工作的东西。

// 查找数据库中所有出现的值

USE [your db here]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[usp_query] (

@value NVARCHAR(128),
@colName NVARCHAR(MAX)
)
AS
BEGIN

DECLARE @sql NVARCHAR(MAX);
-- DECLARE @tables NVARCHAR(MAX);
DECLARE @tabName NVARCHAR(MAX);
-- DECLARE @colName NVARCHAR(MAX);
DECLARE @count INT;


-- construct SQL
--SET @tables = N'SELECT Table_name FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE "yourcollumn"'

DECLARE tabs CURSOR FOR SELECT table_name FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE 'yourcollumn'

OPEN tabs
    FETCH NEXT FROM tabs INTO @tabName

WHILE @@fetch_status = 0

BEGIN
    
    --SET @count = N'SELECT count ( ' + @colName + ' ) FROM ' + @tabName + ' where ' + @colName + ' = ' + @value

    DECLARE @SQLString NVARCHAR(500);  
    DECLARE @ParmDefinition NVARCHAR(500);  
    DECLARE @varOut NVARCHAR(25); 

    SET @SQLString = N'SELECT @count = count ( ' + @colName + ' ) FROM ' + @tabName + ' where ' + @colName + ' = ' + @value;  

    SET @ParmDefinition = N'@count NVARCHAR(25) OUTPUT';  
    
    

    EXECUTE sp_executesql  @SQLString  
    ,@ParmDefinition  
    ,@count = @varOut OUTPUT;


    SET @sql = N'SELECT ' + @colName + ' FROM ' + @tabName + ' where yourcollumn = ' + @value;

    IF @varOut > 0
        SELECT @tabName AS 'value found in table'
        --EXEC sp_executesql @sql
        
    FETCH NEXT FROM tabs INTO @tabName
END
CLOSE tabs

结束;

【讨论】:

以上是关于使用嵌套查询从表列表/多个表中选择 - MS SQL的主要内容,如果未能解决你的问题,请参考以下文章

在列表框 ms-access 2013 VBA 中将多个不同的字段作为列表项返回

有 GUID 列表时如何从表中选择行? [复制]

使用 MySQL 从表中获取特定列表,然后获取剩余的列表

从表中的多个值中选择不在数组中的位置

如何从表中选择带有 oracle sql 中的 group by 子句的嵌套 json 对象?

如何使用 MySQL 查询从表中选择除一列之外的所有内容? [复制]