我有一个结构如下的数据集 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_a
、aml_freq_b
和 aml_freq_c
列是 a、b
和 c
列。例如,aml_freq_a
下的值 56
基本上是 v
在列 a< 中出现的次数的计数/频率
。 b
和 c
也类似。
我有另一个数据集,称为 test
,它只有 a、b
和 c
列,
+---+---+---+
| a| b| c|
+---+---+---+
| w| j| c|
| a| g| w|
| s| d| i|
| g| j| r|
| r| b| u|
+---+---+---+
我需要向其中添加 aml_freq_a
、aml_freq_b
和 aml_freq_c
列。为此,我使用了在 a
列上加入 test
和 train
的子查询,然后选择 aml_freq_a
列.我为 b
和 c
编写了两个子查询。这就是我的查询的样子
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/