gpt4 book ai didi

MySql 选择具有多个特定列的所有表

转载 作者:可可西里 更新时间:2023-11-01 07:58:52 25 4
gpt4 key购买 nike

我想获取所有包含 3 个特定列的表名。

我想要的是从信息架构中获取所有表名,其中包含columnA AND columnB AND columnC

目前我正在使用类似这样的查询

SELECT DISTINCT TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='columnA'
AND TABLE_SCHEMA='mysampledatabase';

如何扩展上述查询并选择包含列名 columnAcolumnB 的表?



我遇到了 this answer和其他类似的答案。他们回答如下:

SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME IN ('columnA','ColumnB')
AND TABLE_SCHEMA='YourDatabase';

然而,他们会选择具有 3 列中任何一列的任何表。我相信这是因为 WHERE COLUMN_NAME IN ('columnA','ColumnB','ColumnC') 我相信这等同于 COLUMN_NAME = 'columnA' OR COLUMN_NAME = 'columnB ' 或 COLUMN_NAME = 'columnC'



我尝试用 WHERE COLUMN_NAME='columnA' AND COLUMN_NAME='columnB' AND COLUMN_NAME='columnC' 替换 WHERE 子句,这显然不会返回任何结果,因为 COLUMN_NAME 一次只能是 1 个值!

最佳答案

这是一个更快的版本:

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME IN ('columnA','columnB','columnC')
group by TABLE_NAME
having count(distinct COLUMN_NAME) = 3

在上面的查询中有计数将没有。 IN 短语中指定的列数。

或尝试以下(但它会给这么多专栏造成灾难。所以避免它)

SELECT DISTINCT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME IN 
( SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'columnA' )
and TABLE_NAME in
( SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'columnB')
and TABLE_NAME in
( SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'columnC')

关于MySql 选择具有多个特定列的所有表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23752116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com