gpt4 book ai didi

mysql - 当一个数据库的名称包含在另一个数据库中时连接两个数据库

转载 作者:行者123 更新时间:2023-11-29 19:26:09 26 4
gpt4 key购买 nike

我有一个应用程序,它有一个中央数据库,其中包含一般信息以及使用我的应用程序的所有公司的信息。

因此,数据库一是main,并且有一个表users,为了论证起见,该表如下所示:

id   |    name   |   api_key |  databasename
1 | Company1 | 12345678 | user_data_1

因此,数据库 2 名为 user_data_1 并且看起来像这样:

id   |    name   |   password  |  more things...
1 | My Name | abc123 | ....

如果我编写以下内容,我知道我可以加入这些数据库以一次获取公司和用户数据:

SELECT d2.name as username, d1.* 
FROM main.users d1, user_data_1.users d2
WHERE d1.`api_key`='12345678' AND d2.password='abc123'

现在,我很确定答案是否定的,因为我找不到任何表明我可以的东西,但是有什么方法可以从第一个数据库的行动态获取第二个数据库的名称并编写以下内容:

SELECT d2.name as username, d1.* 
FROM main.users d1, **(d1.databasename)**.users d2
WHERE d1.`api_key`='12345678' AND d2.password='abc123'

其中第二个 SQL 中的 (d1.databasename) 是尝试从第一个数据库中通过 api_key 列找到的行中获取第二个数据库的名称.

最佳答案

Is there any way to dynamically get the name of the second database from the row of the first

,不在纯 SQL 中。纯 SQL 不允许在数据库、表或列的命名中进行符号替换。

您需要编写一个程序来生成 SQL。它可能就像让你的程序生成 SQL 语句一样简单

USE  user_data_1;

在发出一堆普通查询之前。在你的例子中...

USE user_data_1;

SELECT d2.name as username, d1.*
FROM main.users d1, users d2
WHERE d1.`api_key`='12345678' AND d2.password='abc123';

请注意,对users 的引用未通过数据库名称限定。这意味着它来自最近 USE 中提到的数据库。

(您并没有真正以纯文本形式存储密码,对吗?如果是这样,您的设置就很容易受到网络骗子的攻击。)

关于mysql - 当一个数据库的名称包含在另一个数据库中时连接两个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42136945/

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