SQL - 如何使用父表的列名连接外键控数据

时间:2016-04-21 09:14:53

标签: mysql sql

我有两张桌子:

RUNS

ID  numb   bay0  bay1  bay2
-----------------------------
1    55     aa    bb    cc
2    66     gg   NULL   dd
3    77     dd    bb   NULL

DATA
ID  run_id  serial  data
------------------------------
1     2       gg     xx
2     2       dd     xx

DATA.run_id是指向RUNS.ID的外键。

'串行'以及' bay%'的价值外键指向另一个表'产品'。

我想要的是这样的输出:

OUTPUT
ID  run_id  serial  data  bay
------------------------------
1     2       gg     xx   bay0
2     2       dd     xx   bay2

这样第一个表的列标题就被放入第二个表数据的输出行中。

我一直在玩大量的查询以使其工作,例如获取列标题:

SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME =  'a'
AND TABLE_SCHEMA = 'b'
AND COLUMN_NAME LIKE 'bay%'

但最终我无法看到我将如何获取/合并/连接此输出。有人能帮助我吗?

由于

2 个答案:

答案 0 :(得分:1)

DECLARE @Table1 TABLE 
    ( ID  int,  run_id  int,  serial  varchar(2),  data  varchar(2))
;

INSERT INTO @Table1
    ( ID ,  run_id ,  serial ,  data )
VALUES
    (1, 2, 'gg', 'xx'),
    (2, 2, 'dd', 'xx')
;


DECLARE @Table2 TABLE 
    ( ID  int,  serial  int,  bay0  varchar(2),  bay1  varchar(2), bay2  varchar(2))
;

INSERT INTO @Table2
    ( ID ,  serial ,  bay0 ,  bay1 ,bay2)
VALUES
    (1, 55, 'aa', 'bb','cc'),
    (2, 66, 'gg', NULL,'dd')
;


SELECT T.ID,T.run_id,T.serial,T.DATA,tt.COL FROM @Table1 t
INNER JOIN 
(
SELECT COL,VAL FROM @Table2
cross apply (values('bay0',bay0),('bay1',bay1),('bay2',bay2))cs(COL,VAL)
WHERE col <> 'BAY1')tt
on T.serial = TT.VAL

答案 1 :(得分:1)

如果列数已修复,您可以执行以下操作:

SELECT
  data.id, data.run_id, data.serial, data.data,
  CASE data.serial
      WHEN runs.bay0 THEN 'bay0'
      WHEN runs.bay1 THEN 'bay1'
      WHEN runs.bay2 THEN 'bay2'
      ELSE NULL
  END AS bay
FROM
  data
  JOIN runs ON (data.run_id = runs.id)

只需在CASE语句中列出所有可能的变体。不优雅,但在您将bayX列添加/删除到data表格之前会有效。