2017-04-18 137 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

不客氣。 –