2017-08-10 79 views
0

我有一個表,說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或創紀錄是。

我的查詢是

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人或者設計人是所有記錄。

+0

***我想獲取所有記錄其所有者和創作者都是33998 *** - 對我來說似乎是一個'AND'邏輯,而不是'OR' –

回答

0

由於您只需要表ABC的記錄,因此不需要表vt_tmp_u33998。你只需要在表格ABC中搜索你需要的結果。你的邏輯更改爲:

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

加入是根據我的要求mendatory。 –

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

它會返回其所有者和創建者爲33998的記錄,但我需要所有者或創建者爲33998的所有記錄。 –

+0

我希望輸出如問題中所示,除了在「33998 3」處重複顯示 –

+0

我沒有明白您的觀點第一評論。我覺得兩者都是一樣的。但是,請給我任何輸出示例。 – Amit

0

除非你需要從另一個表中的任何數據(無論是顯示還是比賽),還有使用JOIN沒有意義的。

以下應該足夠您需要有33998作爲所有者或creater。

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這要麼creatorowner3399833998記錄必須是有效的idvt_tmp_u33998表,則查詢會。

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

同樣,當兩者都應該是33998,應該從另一個表則有效的ID ...

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

有成千上萬的記錄。子查詢將減慢進程。 –

+0

僅當需要確保id 33998是有效的id並存在於vt_tmp_u33998表中時才需要子查詢。如果在ABC上有一個引用vt_tmp_u33998中的id且具有級聯的外鍵約束,那麼您將不需要子查詢,因爲外鍵約束事先已完成您的工作,並且在ABC中的33998保證其有效密鑰存在於vt_tmp_u33998。 – JRG

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) 
+0

如果我們添加記錄爲33997作爲smownerid。您的查詢不會返回33997的記錄。我想要記錄其smownerid等於vt_tmp_u33998或smownerid = 33998的abc表。 –

+0

請參閱上面提供的結果集映像。 – Amit