2016-08-19 73 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