2017-04-18 170 views
2

我有一些头痛,试图找出如何创建一个适当的MySQL查询来检索我需要的信息。 这里是我的表PARAM样本行:MySQL组合/ Concat /多选查询

Serial | Repeater1 | Repeater2 | Repeater3 

我想检索所有Repeater1,Repeater2或Repeater3不在串行场。 所有这些字段都在同一个表中。

对于前:

Serial | Repeater1 | Repeater2 | Repeater3 

1234 | 1111  | 2222  | null 

1235 | 1111  | null  | null 

1236 | 1234  | 1111  | 2222 

我的SELECT查询应该只返回:

1111 

2222 

如Repeater1使用1234存在于串行(因此需要避免),这样即使1111或2222出现在不同的列下(本例中的Repeater2和Repeater3)我只想列出DISTINCT Repeater1,Repeater2或Repeater3 NOT IN Serial。

你有什么想法来完成这个请求吗?

提前有很多帮助!

+0

你尝试过这么远吗?提示使用带有临时表的存储过程。 – SMA

回答

0
select * from ( 
    select distinct Repeater1 as repeater from table1 where Repeater1 is not null 
    UNION 
    select distinct Repeater2 as repeater from table1 where Repeater2 is not null 
    UNION 
    select distinct Repeater3 as repeater from table1 where Repeater3 is not null 
) as datarepeater 
where datarepeater.repeater not in (select serial from table1) and datarepeater.repeater!=0 
+0

谢谢Bhawin! – Sush1

0
select r from (
    select Repeater1 as r from t WHERE Repeater1 IS NOT NULL 
    union 
    select Repeater2 as r from t WHERE Repeater2 IS NOT NULL 
    union 
    select Repeater3 as r from t WHERE Repeater3 IS NOT NULL 
) reps 
left join t 
on reps.r = t.Serial 
WHERE t.Serial IS NULL 
+0

非常感谢Oto的帮助! – Sush1

+0

不客气。 –