2012-01-23 84 views
0

我有一個table1(記錄3)和table2(記錄3)。爲什麼將這兩個表合併成一個表union,在MySQL中顯示無效結果?

  • 我在哪裏都有字段名稱。
  • 現在我想從這兩個表
  • 做出結果,它將向我顯示兩個表記錄,如果有重複,則只顯示一個記錄。
  • 從那個結果我會做主要查詢使用like或或其他邏輯語句
  • 所以我預期的輸出記錄將包含5行而不是6行。我怎麼做?

例子:

table1:      table2: 

+-------------------------+ +--------------------------------+ 
| Name   | ID  | Name   | ID 
+-------------------------- +--------------------------------- 
| A    | 1  | 1 December Name | 4 
| B    | 2  | D    | 5 
| 1 December Name | 3  | E    | 6 


My Expected output is following which works, but does not work when i use WHERE 
like to only get '1 December Name': 

+-----------------------------------------------------+ 
| Name    | ID     
+----------------------------------------------------- 
| A     | 1 table1 
| B     | 2 table1 
| 1 December Name | 3 table2 or table1 (no unique) 
| D     | 4 table2 
| E     | 5 table2 

我嘗試這樣:

SELECT * FROM 
(
    ( 
    SELECT name AS name FROM table1 
    ) 
UNION 
    ( 
    SELECT anothername AS name FROM table2 
    ) 
) as t 
WHERE name like '%1 December Name%' 
    limit 1,10 

輸出:你的SQL語句已經成功執行(查詢花費0.2798秒)

問題:以下查詢沒有錯誤,但它確實如此ES沒有發現含有「12月1日名稱」

跟進該記錄:作品我現在知道它使用哪個ID

SELECT NAME, ID, STATUS FROM 
(
(
    SELECT NAME AS name  , id, CONCAT('table1') AS STATUS FROM table1 
) 
UNION ALL 
(
    SELECT ANOTHERNAME AS name, id, CONCAT('table2') AS STATUS FROM table2 
) 
) AS t 

WHERE 

t.NAME LIKE '%1 December Name%' 

LIMIT 1 , 10; 
+0

如果您刪除查詢中的「限制1,10」部分,它會起作用嗎? –

+0

如果您刪除WHERE子句,您會得到什麼結果? –

+0

沒有WHERE子句,整個列表。沒有限制1,10也沒有。 – YumYumYum

回答

2

你可以得到類似的東西你想要什麼:

select name, group_concat(id) from 
(select name, 'table1' as id from table1 
union all 
select name, 'table2' from table2) x 
group by name 

輸出將是:

+------------------------------------+ 
| Name    | ID     
-------------------------------------- 
| A     | table1 
| B     | table1 
| 1 December Name | table1,table2 
| D     | table2 
| E     | table2 

UNION ALL是正確的選擇(不UNION),因爲它不刪除重複,並保留行順序

+0

失敗,沒有找到'1月12日的名字'。 – YumYumYum

+2

@Google:你確定嗎?波希米亞人的SQL聽起來對我來說很合適。 (在這種情況下,'UNION ALL'而不是'UNION'會更有效率。)。 –

+0

@Erwin Brandstetter:是的,我只是在左屏幕上測試我們在此頁面上所做的事情。而所有這些只找到1條包含「12月1日名稱」的記錄。 – YumYumYum

0

試試這個 (SELECT name FROM表1) UNION(SELECT name FROM表2);

相關問題