2016-08-19 75 views
0

说我有以下模式:添加新列的所有

CREATE TABLE table1(colA TEXT, colB TEXT, colC TEXT); 

INSERT INTO table1(colA, colB, colC) VALUES ("A1", "B1", "C1"); 
INSERT INTO table1(colA, colB, colC) VALUES ("A2", "B2", "C2"); 

CREATE TABLE table2(colD TEXT, colE TEXT, colF TEXT); 

INSERT INTO table2(colD, colE, colF) VALUES ("D1", "E1", "F1"); 
INSERT INTO table2(colD, colE, colF) VALUES ("D2", "E2", "F2"); 

我然后运行下面的查询表追加共同为选择几列:

SELECT colA, colB FROM table1 
UNION ALL 
SELECT colD, colE FROM table2; 

将如何你添加另一列到union all的结果(比如colG)? 我想用消息 填充此新列的每一行,具体取决于colA中该行的值。所以如果单元格 的内容以A开始,它应该说“这是A”,或者如果它是D,那么它应该说“这是D”。任何想法如何实现?非常感激。

回答

1

你可以做somethig这样的:

Select 'This is an ' + ColA , * from (
SELECT colA, colB FROM table1 
UNION ALL 
SELECT colD, colE FROM table2) t 
1

有不同的方法。下面显示的是在工会期间检索信件。工会之后,你可以轻松地找回这封信。

MySQL不支持WITH SQL语法,这就是我将其包含在内的原因。几乎没有任何数据库不支持,但MySQL就是其中之一。

PostgreSQL Fiddle

WITH union_tbl AS(
    SELECT colA, colB, left(colA,1) as letter FROM table1 
    UNION ALL 
    SELECT colD, colE, left(colD,1) as letter FROM table2 
) 

SELECT colA as "colA", -- double quotes are necessary in Pg to force case 
     colB as "colB", 
     'This is a' || CASE letter WHEN 'A' THEN 'n ' ELSE ' ' END || letter as "colG" 
FROM union_tbl; 

MySQL Fiddle

SELECT colA, 
     colB, 
     concat('This is a', case letter when 'A' then 'n ' else ' ' end, letter) as colG 
FROM (
    SELECT colA, colB, left(colA,1) as letter FROM table1 
    UNION ALL 
    SELECT colD, colE, left(colD,1) as letter FROM table2 
) union_tbl; 

输出:

colA colB colG 
A1 B1 This is an A 
A2 B2 This is an A 
D1 E1 This is a D 
D2 E2 This is a D 
0

使用的desirede结果在SQL下面的查询。

SELECT CASE WHEN LEFT(CAST(ColA as VARCHAR(50)),1)='A' THEN 'This is an A' 
      WHEN LEFT(CAST(ColA as VARCHAR(50)),1)='D' THEN 'This is a D' 
       ELSE 'Word in ColA is not starting with A or D' --Add if required 
      END ColG , * 
FROM (
     SELECT colA, colB FROM table1 
     UNION ALL 
     SELECT colD, colE FROM table2) t