выберите общие значения нескольких таблиц в mysql - PullRequest
0 голосов
/ 19 февраля 2020

Я пишу код php для вычисления значения. У меня есть 4 таблицы с 2 столбцами каждая. их заголовки одинаковы. Я хочу получить второй столбец таблиц, которые имеют, скажем, «MAN», значение в первом столбце: вот мои таблицы и их фиктивные значения:

enter image description here

Я объединил таблицы в dst с предложением where, но проблема возникает, когда таблица не имеет общего значения и у нас нет полного внешнего соединения в mysql. Я знаю, что мы можем смоделировать это с объединением всех операций, но я хочу эффективный способ сделать это. вот моя попытка:

select t1.dst, t1.pay as pay, t2.pay as pay2, t3.pay as pay3, t4.pay as pay4 from t1 left outer join t2 on t1.dst = t2.dst left outer join t3 on t3.dst=t2.dst left outer join t4 on t1.dst=t4.dst where t1.dst='man';

это глупо, потому что левое внешнее соединение не подходит для этой цели, кроме особых случаев.

на самом деле я хочу это:

this

1 Ответ

1 голос
/ 19 февраля 2020

Первый союз, затем пивот

drop table if exists t,t1,t2,t3;
create table t  (dst varchar(3),value int);
create table t1 (dst varchar(3),value int);
create table t2 (dst varchar(3),value int);
create table t3 (dst varchar(3),value int);


insert into t values ('abc',10),('man',10);
insert into t1 values ('abc',10),('man',5);
insert into t2 values ('abc',10),('man',10);
insert into t3 values ('abc',10);

select  dst,
          MAX(CASE WHEN tbl = 't' then value end) as t1,
          MAX(CASE WHEN tbl = 't1' then value end) as t1,
          MAX(CASE WHEN tbl = 't2' then value end) as t2,
          MAX(CASE WHEN tbl = 't3' then value end) as t3  
from
(
select 't' as tbl,dst,value from t where dst = 'man'
union
select 't1' as tbl,dst,value from t1 where dst = 'man'
union
select 't2' as tbl,dst,value from t2 where dst = 'man'
union
select 't3' as tbl,dst,value from t3 where dst = 'man'
) s 
group by s.dst;

+------+------+------+------+------+
| dst  | t1   | t1   | t2   | t3   |
+------+------+------+------+------+
| man  |   10 |    5 |   10 | NULL |
+------+------+------+------+------+
1 row in set (0.00 sec)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...