使用 JOIN 在 MySQL 中合并 table 数据
Combine table data in MySQL using JOIN
我正在尝试在 MySQL 中加入两个 table,其中一个我有一组 ID(类型为 GTEX-14BMU-1526-SM-5TDE6)和一组类型的组织 (SMTS),我必须 select 组织类型的 ID 'Blood'(这是相同 table 的另一列),然后我只需要取ID 名称中的前两个字符串 (GTEX-14BMU) 并列出不同的字符串。
然后我必须将它与第二个 table 进行比较,其中我有一个 ID 列表,这些 ID 已经属于类型 (GTEX-14BMU),必须满足此列性别的条件同样 table 是 2.
预期结果是一个列表,其中包含性别类型 2 和组织类型 'Blood' 的 ID,这意味着它们是一致的。我试图通过在同一语句中使用 JOIN 和所有需要的条件来解决这个问题,即:
mysql> SELECT DISTINCT SUBSTRING_INDEX(g.SAMPID,'-',2) AS sampid, m.SUBJID, g.SMTS, m.SEX
-> FROM GTEX_Sample AS g
-> JOIN GTEX_Pheno AS m ON sampid=m.SUBJID
-> WHERE m.SEX=2
-> AND g.SMTS='Blood';
但是我要么从所有可能性的组合中得到太多结果,要么得到一个空集。还有其他方法吗?
这里:
JOIN GTEX_Pheno AS m ON sampid=m.SUBJID
我怀疑您的意图是引用 select
子句中定义的 substring_index()
表达式(它的别名也是 sampid
)。在 SQL 中,您不能在同一范围内重用 select
子句中定义的别名(有少数例外,例如 ORDER BY
子句或 GROUP BY
MySQL 中的子句)。因此数据库认为您指的是示例 table 的列 sampid
。如果您提供了不同的别名(例如 sampid_short
)并尝试在连接的 ON
子句中使用,您将遇到编译错误。
您需要重复表达式,或使用子查询:
select substring_index(g.sampid, '-', 2) as sampid, m.subjid, g.smts, m.sex
from gtex_sample as g
inner join gtex_pheno as m on substring_index(g.sampid, '-', 2) = m.subjid
where m.sex = 2 and g.smts = 'blood';
我正在尝试在 MySQL 中加入两个 table,其中一个我有一组 ID(类型为 GTEX-14BMU-1526-SM-5TDE6)和一组类型的组织 (SMTS),我必须 select 组织类型的 ID 'Blood'(这是相同 table 的另一列),然后我只需要取ID 名称中的前两个字符串 (GTEX-14BMU) 并列出不同的字符串。
然后我必须将它与第二个 table 进行比较,其中我有一个 ID 列表,这些 ID 已经属于类型 (GTEX-14BMU),必须满足此列性别的条件同样 table 是 2.
预期结果是一个列表,其中包含性别类型 2 和组织类型 'Blood' 的 ID,这意味着它们是一致的。我试图通过在同一语句中使用 JOIN 和所有需要的条件来解决这个问题,即:
mysql> SELECT DISTINCT SUBSTRING_INDEX(g.SAMPID,'-',2) AS sampid, m.SUBJID, g.SMTS, m.SEX
-> FROM GTEX_Sample AS g
-> JOIN GTEX_Pheno AS m ON sampid=m.SUBJID
-> WHERE m.SEX=2
-> AND g.SMTS='Blood';
但是我要么从所有可能性的组合中得到太多结果,要么得到一个空集。还有其他方法吗?
这里:
JOIN GTEX_Pheno AS m ON sampid=m.SUBJID
我怀疑您的意图是引用 select
子句中定义的 substring_index()
表达式(它的别名也是 sampid
)。在 SQL 中,您不能在同一范围内重用 select
子句中定义的别名(有少数例外,例如 ORDER BY
子句或 GROUP BY
MySQL 中的子句)。因此数据库认为您指的是示例 table 的列 sampid
。如果您提供了不同的别名(例如 sampid_short
)并尝试在连接的 ON
子句中使用,您将遇到编译错误。
您需要重复表达式,或使用子查询:
select substring_index(g.sampid, '-', 2) as sampid, m.subjid, g.smts, m.sex
from gtex_sample as g
inner join gtex_pheno as m on substring_index(g.sampid, '-', 2) = m.subjid
where m.sex = 2 and g.smts = 'blood';