我有一张表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>
答案 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}}或creator
为owner
且33998
必须为有效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)