使用 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';