具有多个列的内部联接返回重复记录

时间:2017-08-10 06:13:49

标签: mysql

我有一张表ABC

id smcreatorid smownerid
1  33998       33998
2  33998       3
3  33997       33998
4  33940       33998
5  33997       3
6  1           33997
7  12          33997
8  33998       33940       

和表vt_tmp_u33998

id
33997
33998
3

我想获取所有smownerid等于vt_tmp_u33998的ID或者创建者 33998 的记录。

我的查询是

SELECT  ABC.smownerid, ABC.smcreatorid FROM ABC
INNER JOIN vt_tmp_u33998 ON vt_tmp_u33998.id = ABC.smownerid or (vt_tmp_u33998.id = ABC.smcreatorid and ABC.smcreatorid = 33998)

此查询返回重复记录。

smcreatorid   smownerid
33998         33998
33998         3
33997         33998
33940         33998
33997         3
33998         3
1             33997
12            33997
33998         33940 

我想要的是不使用不同的列或按ID分组,获取所有smownerid等于 vt_tmp_u33998的ID 或创建者 33998 的记录。< / p>

4 个答案:

答案 0 :(得分:0)

由于您只需要表ABC中的记录,因此您不需要表vt_tmp_u33998。您只需要在表ABC中搜索所需的结果。将您的逻辑更改为:

SELECT ABC.smownerid, ABC.smcreatorid FROM ABC WHERE (ABC.smownerid = 33998 or ABC.smcreatorid = 33998)

答案 1 :(得分:0)

SELECT smownerid,smcreatorid 
FROM abc 
JOIN vt_tmp_u33998 
ON vt_tmp_u33998.id = smownerid 
AND smcreatorid =smownerid
AND smownerid=33998

答案 2 :(得分:0)

除非您需要来自另一个表的任何数据(显示或匹配),否则使用JOIN是没有意义的。

以下应该足以让您拥有33998作为拥有者或创作者。

SELECT ABC.smcreatorid, ABC.smownerid
FROM ABC 
WHERE ABC.smownerid = 33998 
OR ABC.smcreatorid = 33998

如果33998应该同时作为所有者和创作者,那么它就是。

SELECT ABC.smcreatorid, ABC.smownerid
FROM ABC 
WHERE ABC.smownerid = 33998 
AND ABC.smcreatorid = 33998

假设您需要来自ABC的{​​{1}}或creatorowner33998必须为有效33998的记录。 id表然后查询。

vt_tmp_u33998

类似地,当两者都应该是33998并且应该是来自另一个表的有效id然后......

SELECT ABC.smcreatorid, ABC.smownerid
FROM ABC 
WHERE (ABC.smownerid = 33998 
OR ABC.smcreatorid = 33998)
AND 33998 IN (SELECT id FROM vt_tmp_u33998)

答案 3 :(得分:0)

See Below Image

SELECT smownerid,smcreatorid 
FROM abc 
JOIN vt_tmp_u33998 
ON vt_tmp_u33998.id = smownerid 
AND (smownerid=33998 OR smcreatorid=33998)