2017-08-10 6 views
0

を返す私はテーブルを持っているABCが重複レコード

id smownerid smcreatorid 
1 33997   1 
2 33997   1 
3 33997   1 
4 33998   1 
5 33998   1 
6 33998   33998 
7 33998   33998 
8 33998   33998 
9 33998   33998 
10 33940   33998 
11 33940   33998 
12 3    33998 
13 33940   1 
14 33940   33998 
15 33997   33997 
16 3    33997 
17 33940   33998 
18 4    33940 
19 4    33997 
20 33980  33940 

別のテーブルnon_admin_users

id 
3 
33940 
33997 
33998 
33999 

マイSQLクエリが

SELECT abc.* from abc 
INNER JOIN non_admin_users vt_tmp_u33998 ON vt_tmp_u33998.id = abc.smownerid 
OR (
vt_tmp_u33998.id = abc.smcreatorid 
AND vt_tmp_u33998.id =33998 
) 

このクエリであると言います重複を返す 記録。

私がしたいのは、どこかの句か別名の列かグループバイステートメントを使わずに、non_admin_usersのidに等しいsmowneridまたはsmcreatoridが33998のabcテーブルからすべてのレコードを取得することです。

私はこの次の出力

id smownerid smcreatorid 
1 33997   1 
2 33997   1 
3 33997   1 
4 33998   1 
5 33998   1 
6 33998   33998 
7 33998   33998 
8 33998   33998 
9 33998   33998 
10 33940   33998 
11 33940   33998 
12 3    33998 
13 33940   1 
14 33940   33998 
15 33997   33997 
16 3    33997 
17 33940   33998 
+0

OK、なぜトリッキーな別名のですadmin_users以外ですか? –

+0

ご質問申し訳ございません。 non_admin_usersの参加が必要です。 –

答えて

0
INNER JOIN non_admin_users vt_tmp_u33998 ON (vt_tmp_u33998.id = abc.smownerid AND abc.smcreatorid !=33998) OR (vt_tmp_u33998.id = abc.smcreatorid AND vt_tmp_u33998.id =33998) 
+0

私は混乱していますsmcreatorid = 33998。あなたがsmcreatoridの代わりにon_admin_users.id = 33998しか言及していないのであれば、はるかに簡単です。私はabcテーブルがon_admin_usersテーブルに存在しないレコードを持つことができると思っていました。私は答えを投稿した私たちのすべてが、あなたの懸念事項に類似の考えを持っていると思っています。あなたがしたようなサブクエリを使わずに単純な選択と結合をしてください。私はあなたが間違っている可能性があります – Learning

0

はこれを試してみてくださいしたい:あなたはすべてのレコードをしたい場合は、WHERE条件をコメントアウトすることができます

SELECT a.smownerid, a.smcreatorid 
FROM abc a JOIN non_admin_users na ON a.smownerid = na.id 
WHERE a.smownerid = 33998; 

+0

** smownerid **がnon_admin_usersの** id **またはsmcreatorが33998と等しいabcテーブルからすべてのレコードを取得することが必要です。 –

0

お試しいただけますか?

SELECT a.* 
FROM abc a LEFT JOIN non_admin_users na ON a.smownerid = na.id 
WHERE a.smcreatorid = 33998 OR IFNULL(na.id,'') != ''; 

[OR]ジャスト33998のレコードは二回参加されないことを確認します。組合でおそらく暗黙の明確な

select * from 
(SELECT a.* 
FROM abc a INNER JOIN non_admin_users na ON a.smownerid = na.id AND a.smcreatorid!=33998 
UNION ALL 
SELECT b.* FROM abc b INNER JOIN abc b1 ON b.id=b1.id AND b.smcreatorid=33998) a 
order by id; 
+0

OPは "Where節を使用しないでください" .. –

0

は、それはあなたのクエリは、質問(vtiger_crmentit)に引用されていないテーブルを参照することを少し混乱だ

select * from 
(
SELECT a.id, A.smownerid, A.smcreatorid 
FROM ABC a 
INNER JOIN non_admin_users n on n.id = a.smownerid and a.smcreatorid <> 33998 
union 
SELECT a.id, A.smownerid, A.smcreatorid 
FROM ABC a 
inner JOIN non_admin_users n on n.id = a.smownerid 
) s 
order by id 
; 

+------+-----------+-------------+ 
| id | smownerid | smcreatorid | 
+------+-----------+-------------+ 
| 1 |  33997 |   1 | 
| 2 |  33997 |   1 | 
| 3 |  33997 |   1 | 
| 4 |  33998 |   1 | 
| 5 |  33998 |   1 | 
| 6 |  33998 |  33998 | 
| 7 |  33998 |  33998 | 
| 8 |  33998 |  33998 | 
| 9 |  33998 |  33998 | 
| 10 |  33940 |  33998 | 
| 11 |  33940 |  33998 | 
| 12 |   3 |  33998 | 
| 13 |  33940 |   1 | 
| 14 |  33940 |  33998 | 
| 15 |  33997 |  33997 | 
| 16 |   3 |  33997 | 
| 17 |  33940 |  33998 | 
+------+-----------+-------------+ 
+0

ABCのテーブルの記録のLakhがあるはずです。組合は前倒しを遅らせるだろう。 @P.Salmon –