Mysql 连接具有相同列的两个表

Mysql 连接具有相同列的两个表,mysql,sql,join,Mysql,Sql,Join,有两个表T1和T2。它们都有3列,其中2列相同,两个表中的数据相同。让它们成为T1表中的ID C1,C2和T2表中的C1,C2,COM 问题是所有C1数据都存在于T2中,但C2数据可能会丢失 我需要为每个ID返回一个带有COM的表 尝试 SELECT T1.ID, T2.COM FROM T1 LEFT JOIN T2 ON T1.C1 = T2.C1; 但是它返回了不正确的结果。作为一个总结:您需要一个且仅需要一个COM by ID(即使它不在第二个表中),并且希望ID按升序排序 您需要添

有两个表T1和T2。它们都有3列,其中2列相同,两个表中的数据相同。让它们成为T1表中的ID C1,C2和T2表中的C1,C2,COM

问题是所有C1数据都存在于T2中,但C2数据可能会丢失

我需要为每个ID返回一个带有COM的表

尝试

SELECT T1.ID, T2.COM
FROM T1 
LEFT JOIN T2 ON T1.C1 = T2.C1;

但是它返回了不正确的结果。

作为一个总结:您需要一个且仅需要一个COM by ID(即使它不在第二个表中),并且希望ID按升序排序

您需要添加联接条件:

SELECT CAST(T1.ID as UNSIGNED) as ID, T2.COM
FROM T1 
LEFT JOIN T2 ON T1.C1 = T2.C1
AND (T1.C2 = T2.C2)  -- The first condition of this row is to handle the null value
OR (T1.C2 NOT IN (SELECT C2 FROM T2) AND T2.C2 = 'NA')
    ORDER BY CAST(T1.ID as UNSIGNED) -- To convert to int and sort ascending
编辑:要对结果进行升序,需要将ID转换为整数,然后对结果进行排序。这里有一些


编辑2:这里是3和4的,我认为这是更好的方法,但我不建议这样做通常

你能发布一些数据或解释结果不正确的原因吗?您的SQL看起来是正确的。请澄清您所说的“C2数据可能会丢失”是什么意思,并提供示例数据。这就是您要查找的:
SELECT T1.ID,T2.COM FROM T1 LEFT JOIN T2 ON T1.C1=T2.C1和(T1.C2为NULL或T1.C2=T2.C2)?您需要在C1和C2上加入它,这意味着如果其中任何一个不匹配,您将无法获得任何回报。这是因为您将id设置为varchar,将其更改为int,然后它将被排序。结果看起来更好,但仍然不是所需的结果:(太好了,非常感谢!也许你知道如何将“Y”改为ID 3和ID 4而不是NULL?你能更改数据库中的数据吗?取决于需要更改的内容我认为没有-任务中没有说明。只有一些规则说明COM是根据以下规则映射的:如果a.C1='a'和a.C2='A1',则COM='1',ELIF a.C1='A'和A.C2='A2'然后COM='2'…如果A.C2='A'然后COM='99',如果有帮助的话。