【问题标题】:MySQL: Match columns from three tablesMySQL:匹配三个表中的列
【发布时间】:2015-11-11 03:16:36
【问题描述】:

我在下面有三个表。主键是 PK 列。我想在每个表上获取唯一的 PK 并根据 PK 填充 NO 列(请参见下面的输出)。我怎样才能使用 MySQL 做到这一点?抱歉我的问题,我刚接触 MySQL,我只知道如何选择那些独特的 PK。

 select U_IMSI from
 (select IMSI from table_A
 UNION
 select IMSI from table_B
 UNION
 select IMSI from table_C) as UNIQUE_IMSI 

table_A

PK     NO  
12345  22222
78912  33333
56892  44444

table_B

 PK     NO
 12345  88888
 78912  99999
 56892  11111

table_C

  PK    NO
  12345 NET
  78782 SMART
  12345 MMS
  12345 SMART
  56892 MMS
  78912 GT

table_C 中的注意事项:如果 PK 有 1 到 3 个值,则获取 NO 值并填充为 C1 C2 C3。

输出

 PK     A      C1   C2    C3     B
 12345  22222  NET  MMS  SMART   88888
 78912  33333  GT               99999
 56892  44444  MMS              11111
 78782         SMART

【问题讨论】:

  • 表 c 中每个 PK 的最大行数是多少?对于每个 PK,表 a 和/或表 b 中是否总是有一行?
  • 最大值为 3。是的,每个 PK 在表 a 和 b 中总是有一行。

标签: mysql join left-join


【解决方案1】:

这可能会让你走上正轨。

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
;

【讨论】:

    猜你喜欢
    • 2013-01-16
    • 1970-01-01
    • 2012-10-25
    • 2014-08-29
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    • 2012-12-30
    • 2019-01-27
    相关资源
    最近更新 更多