首页 > 解决方案 > 创建新表时无法获取值

问题描述

SQL 相当新 - 将 MySQL 与 PhpMyAdmin 一起使用 - 我有两个 CSV 表,其中包含需要合并到新 CSV 中的信息,同时删除所有其他不适用的列。我需要的列是email、user_id,需要新建一个名为“role”的列

每个文件的电子邮件列不同,最终结果将是 74 行,而不是 100 行(并非所有电子邮件都会匹配)。到目前为止,我已经能够使用 join 来获取我需要的列。我正在努力的是创建一个具有“角色”的新表并进行数据传输。

该表已创建,具有正确的列,但未显示示例和测试中的值。

我开始的:

Select example.user_name,
test.email
from example
join test
on example.user_email = test.email

我要去的地方:

CREATE table test2 (role text)
select email, user_name
from (
Select example.user_name,test.email
from example
join test
on example.user_email = test.email)
As Test

我已经做了 4 个小时(我花了很多时间才达到这一点),这个障碍是最困难的。任何帮助将不胜感激!

Table 1 Example. 
User ID :1111. 
User_email: example.com. 

Table 2 Test   
first_name: Tom   
last_name: Laugh. 
email: example.com   

第一个查询将这两个连接在一起。第三个表需要添加“角色”,这将是一个定义的值,看起来像

Table 3 All together. 
Role: onboarding. 
user_id: 1111. 
user_email: example.com   

希望这有助于澄清事情!为混乱道歉。

标签: mysqlsql

解决方案


CREATE TABLE test2 ( user_email VARCHAR(255),
                     user_id INT PRIMARY KEY,
                     user_name VARCHAR(255),
                     role TEXT)
SELECT user_email, 
       example.user_id,
       CONCAT_WS(' ', test.first_name, test.last_name) user_name,
       'onboarding' role
FROM example
JOIN test USING (user_email);
  1. 完全指定新的表结构。这消除了将来可能出现的一些问题(例如,您可能会获得比您需要的短的字符串列)。
  2. 在 SELECT 部分完全指定列名,并严格匹配表定义中的列名 - 如果不是,则目标列将为空,但将添加多余的列,其中包含不需要的(有时是奇怪的)名称。
  3. 始终使用完全相同的名称来匹配不同表中的列,直到不可能为止。

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=5e7c77aa8ad2f5f44e1851bd3ebe17e7


推荐阅读