mysql - SQL:从另一个数据集添加多列

标签 mysql sql

我有一个结构如下的数据集 train

+---+---+---+----------+----------+----------+                                  
|  a|  b|  c|aml_freq_a|aml_freq_b|aml_freq_c|
+---+---+---+----------+----------+----------+
|  v|  l|  l|        56|        42|        29|
|  u|  g|  l|        47|        46|        29|
|  s|  g|  l|        28|        46|        29|
|  v|  m|  l|        56|        33|        29|
|  h|  m|  l|        44|        33|        29|
+---+---+---+----------+----------+----------+

aml_freq_aaml_freq_baml_freq_c 列是 a、bc 列。例如,aml_freq_a 下的值 56 基本上是 v 在列 a< 中出现的次数的计数/频率bc 也类似。

我有另一个数据集,称为 test,它只有 a、bc 列,

+---+---+---+
|  a|  b|  c|
+---+---+---+
|  w|  j|  c|
|  a|  g|  w|
|  s|  d|  i|
|  g|  j|  r|
|  r|  b|  u|
+---+---+---+

我需要向其中添加 aml_freq_aaml_freq_baml_freq_c 列。为此,我使用了在 a 列上加入 testtrain 的子查询,然后选择 aml_freq_a 列.我为 bc 编写了两个子查询。这就是我的查询的样子

SELECT test.*, 
       (SELECT aml_freq_a 
        FROM   test 
               LEFT JOIN train 
                      ON test.a = train.a), 
       (SELECT aml_freq_b 
        FROM   test 
               LEFT JOIN train 
                      ON test.b = train.b), 
       (SELECT aml_freq_c 
        FROM   test 
               LEFT JOIN train 
                      ON test.c = train.c) 
FROM   test 

但是当我运行这个时,我得到了以下错误

more than one row returned by a subquery used as an expression

我不明白这个错误。因为我正在做一个 left join,左边是 test,怎么会有更多的行呢?

任何方向都很好。

PS:我阅读了其他关于同一问题的帖子,但他们遇到此错误的方式与我正在做的不同,那里的解决方案对我帮助不大。

最佳答案

我想你在这里只需要三个连接,一个用于 train 表中的每个频率列:

SELECT
    t.a,
    t.b,
    t.c,
    tr1.aml_freq_a,
    tr2.aml_freq_b,
    tr3.aml_freq_c
FROM test t
LEFT JOIN train tr1
    ON t.a = tr1.a
LEFT JOIN train tr2
    ON t.b = tr2.b
LEFT JOIN train tr3
    ON t.c = tr3.c

编辑:

如果您想采用当前的方法,那么以下这些方法可能会奏效:

SELECT
    t.*, 
   (SELECT aml_freq_a FROM train tr WHERE t.a = tr.a) aml_freq_a,
   (SELECT aml_freq_b FROM train tr WHERE t.b = tr.b) aml_freq_b,
   (SELECT aml_freq_c FROM train tr WHERE t.c = tr.c) aml_freq_c
FROM test t;

我说可能,因为这些子查询必须总是返回单个值以避免错误。即使这可行,我提供的连接方法也应该优于它。

关于mysql - SQL:从另一个数据集添加多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50447674/

相关文章:

sql - 引用非主键列的外键约束有什么缺点?

MySql CASE WHEN THEN 也需要 WHERE?

sql - 如何获取存储过程中引用的所有列的列表?

php - 将 SQL 查询设置为等于数组

MySQL ORDER BY 定制

mysql - 最有效的指标体系

java - Spring JDBC MySQL/MariaDB 数据在第 1 行的 'start_date' 列被截断

sql - 在sql server中生成下一个序列号

mysql - mysql如何连接两个表

mysql查询: i want to 2 queries result merged w. r.t主键