mysql получение имени столбца и сравнение с другой таблицей - PullRequest
0 голосов
/ 31 марта 2020

я получил две таблицы

таблица A

Date | A001 | B001
-------------------
2020 |  2   |  3

таблица b

ItemCode | ItemName
---------------------
   A001  |   candy
   B001  |   Apple

возможно ли это выбрать номер из таблицы A, а также фактическое itemName из таблицы B? А в английском языке 1015 * будет что-то вроде

select * from table A and itemName from table B where TableA's columnName = TableB's ItemName;

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Полагаю, вы хотите заменить только заголовки, поэтому с помощью information_schema.columns и dynamici c sql

set @sql = (select concat('select date,',
        aa.gc1,
        ' from (',
        replace(substring(bb.gc2,1,length(bb.gc2) - length('union all')),'union all,','union all '),
        ') s group by date'
        )
from
(
select 
        group_concat(
         'max(case when itemname = ',char(39),itemname,char(39),' then value  end) as ',itemname
         ) gc1
from
(
select itemname , column_name from information_schema.columns 
join   t1 on t1.itemcode = column_name
where table_name = 't'
and column_name in (select distinct itemcode from t1)
) a
) aa
cross join
(
select 
        group_concat(
         'select date,',char(39),itemname,char(39),' as itemname,', column_name,' as value from t  union all'
         ) gc2
from
(
select itemname , column_name from information_schema.columns 
join   t1 on t1.itemcode = column_name
where table_name = 't'
and column_name in (select distinct itemcode from t1)
) b
) bb
) ;

prepare sqlstmt from @sql;
execute sqlstmt;
deallocate prepare sqlstmt;

+------+-------+-------+
| date | candy | Apple |
+------+-------+-------+
| 2020 |     2 |     3 |
+------+-------+-------+
1 row in set (0.001 sec)
0 голосов
/ 31 марта 2020

Если я следил за вами правильно, вы можете сделать:

select a.*, ba.item_name item_name_a, bb.item_name item_name_b
from a
left join b ba on ba.item_code = 'A001'
left join b bb on bb.item_code = 'B001'

Или вы можете использовать подзапросы:

select
    a.*,
    (select item_name from b where item_code = 'A001') item_name_a,
    (select item_name from b where item_code = 'B001') item_name_b
from a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...