Вы можете сделать запрос из таблицы, сгенерированной (то есть из подзапроса таблицы или производной таблицы ) из объединения значений:
select
*
from (
(select loc1 as loc, s.* from s)
union
(select loc2 as loc, s.* from s)
union
(select loc3 as loc, s.* from s)
) t
where
t.loc in ("A","B","C","D");
Выполнение вышеуказанного запроса дает:
+-----+------+------+------+
| loc | loc1 | loc2 | loc3 |
+-----+------+------+------+
| A | A | 2 | 3 |
| D | D | 2 | 3 |
| B | 1 | B | 3 |
| C | 1 | 2 | C |
+-----+------+------+------+
при запуске на этих составленных данных:
drop table if exists s;
create table s (
loc1 varchar(255) not null,
loc2 varchar(255) not null,
loc3 varchar(255) not null
);
insert into s values
("1","2","3"),
("A","2","3"),
("1","B","3"),
("1","2","C"),
("D","2","3");
См. Также демоверсию