我有三张桌子。主键是PK列。我想在每个表上获得唯一的PK并根据PK填充NO列(参见下面的输出)。我怎么能用MySQL做到这一点?对不起我的问题,我刚认识MySQL,我只知道如何选择那些独特的PK。
--conf spark.yarn.executor.memoryOverhead=600
TABLE_A
select U_IMSI from
(select IMSI from table_A
UNION
select IMSI from table_B
UNION
select IMSI from table_C) as UNIQUE_IMSI
表-B
PK NO
12345 22222
78912 33333
56892 44444
table_C
PK NO
12345 88888
78912 99999
56892 11111
在table_C中注意:如果PK有1到3个值,则获取NO值并填充为C1 C2 C3。
输出
PK NO
12345 NET
78782 SMART
12345 MMS
12345 SMART
56892 MMS
78912 GT
答案 0 :(得分:0)
这可能会让你走上正轨。
SELECT pk,
a_no,
c1,
IF(c2 = c1,NULL,c2) c2,
IF(c3 = c2,NULL,c3) c3,
b_no
FROM(
-- Separate the 3 table_C NO values into columns.
SELECT pk, a_no,
SUBSTRING_INDEX(c_no,',',-1) c1,
SUBSTRING_INDEX( SUBSTRING_INDEX(c_no,',',-2),',',1 ) c2,
SUBSTRING_INDEX( SUBSTRING_INDEX(c_no,',',-3),',',1 ) c3,
b_no
FROM (
-- Condense to 1 row per PK, grouping the table_C NO values
SELECT pk,
MAX(a_no) a_no,
MAX(b_no) b_no,
GROUP_CONCAT(DISTINCT c_no) c_no
FROM(
-- Get the full outer join list of pks from:
-- * PKS in table_A, table_B
-- * PKS only in table_C
SELECT a.pk, a.no a_no, b.no b_no, c.no c_no
FROM table_A a
LEFT JOIN table_B b ON (a.pk = b.pk)
LEFT JOIN table_C c ON (a.pk = c.pk)
UNION
SELECT c.pk, null, null, c.no
FROM table_C c
) q
GROUP BY pk
) q
) q
;