gpt4 book ai didi

mysql - 如何重命名选择联合查询中的列?

转载 作者:行者123 更新时间:2023-11-29 22:27:51 25 4
gpt4 key购买 nike

您好,我有以下查询,我想从客户表中选择客户,并从设置表中选择值状态和货币。我做了这个查询,但不起作用,因为两个表、客户端和设置都有一个名称为 id 的列。

SELECT *, clients.id as client_id FROM clients_table as clients WHERE clients.id = 163
UNION SELECT settings.values AS statuses FROM settings_table as settings WHERE settings.options = 'statuses'
UNION SELECT setting.il_values AS currencies FROM settings_table as setting WHERE setting.options = 'currencies'

我收到的错误消息

#1222 - The used SELECT statements have a different number of columns

我该如何解决这个问题?

最佳答案

这就是您可以做到的方法 - 但最好将查询分开。

 SELECT *, clients.id as client_id FROM clients_table ...
UNION SELECT settings.values, NULL, NULL, NULL... AS statuses
SELECT setting.il_values, NULL, NULL, NULL... AS currencies ...

您可以添加所需数量的 NULL 列,以使 SELECT 具有相同的行数。然后你会得到:

 User    Email    Password    id
john ... ... 613
active NULL NULL NULL
dollar NULL NULL NULL

您显然想要检索设置货币并区分它们,但由于您运行一个选择,所以任何列都只会有<一个名字。因此,第一列将被称为“用户”或“设置”或“货币”,但永远不会被称为“正确的值”。

如果你想一次性收集所有信息,你需要放弃“*”语法并执行以下操作:

SELECT 'userinfo' as wtf, User, Name, Email, ... FROM customers
UNION
SELECT 'setting' as wtf, value, keyname, null, ... FROM settings
UNION
SELECT 'currency' as wtf, value, null, null, ... FROM currencies

这会给你:

wtf         User     Password
userinfo John whatever ...
setting 800x600 resolution NULL
setting Mozilla browser NULL
currency dollar NULL NULL

这将使您能够区分哪个是哪个。

即使如此,您也无法可靠地混合数据类型(取决于您的应用程序 DA 层)。因此,如果您有一个数字货币的“exchange_rate”列,并且它对应于“密码”的用户列,则任何情况都可能发生。通常,墨菲就是墨菲,这是你不希望看到的。

为了避免这种情况,如果它成为一个问题,您需要在所有没有适当类型的表中添加一个额外的列,并给它一个适当的值(NULL,或0.0,或其他)。

关于mysql - 如何重命名选择联合查询中的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30097957/

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