2012-05-14 41 views
0

查詢3個表,最後一個表有額外的行查找。
試過這樣:sql聯合不規則組合

(SELECT 't1' AS tn, navid, clicks AS cc, tags 
FROM t1 
WHERE DATE_ADD(d, INTERVAL '0 8' DAY_HOUR) <= NOW() 
AND tags LIKE '%cars%') 

UNION DISTINCT 

(SELECT 't2' AS tn, navid, clicks AS cc, tags 
FROM t2 
WHERE DATE_ADD(d, INTERVAL '0 8' DAY_HOUR) <= NOW() 
AND tags LIKE '%cars%') 

UNION DISTINCT 

(SELECT 't3' AS tn, navid, title, clicks AS cc, tags 
FROM t3 
WHERE DATE_ADD(d, INTERVAL '0 8' DAY_HOUR) <= NOW() 
AND tags LIKE '%cars%') 

我想獲得在T3
任何幫助的title領域,由於

回答

2

只需添加它的前兩個子查詢,與像NULL值:

(SELECT 't1' AS tn, navid, NULL as title, clicks AS cc, tags 
FROM t1 
WHERE DATE_ADD(d, INTERVAL '0 8' DAY_HOUR) <= NOW() 
     AND tags LIKE '%cars%') 
UNION DISTINCT 
(SELECT 't2' AS tn, navid, NULL as title, clicks AS cc, tags 
FROM t2 
WHERE DATE_ADD(d, INTERVAL '0 8' DAY_HOUR) <= NOW() 
     AND tags LIKE '%cars%') 
UNION DISTINCT 
(SELECT 't3' AS tn, navid, title, clicks AS cc, tags 
FROM t3 
WHERE DATE_ADD(d, INTERVAL '0 8' DAY_HOUR) <= NOW() 
     AND tags LIKE '%cars%') 
1

SQLS通過UNION組合應該具有的列相同的數量和類型。

這是因爲你只有一個結果,即使它看起來像多一點查詢的查詢。

所以你必須有對title列中的值。你沒有在t1t2。因此,只要選擇null

SELECT 't1' AS tn, navid, null as title, clicks AS cc, tags ...

(SELECT 't1' AS tn, navid, null as title, clicks AS cc, tags 
FROM t1 
WHERE DATE_ADD(d, INTERVAL '0 8' DAY_HOUR) <= NOW() 
AND tags LIKE '%cars%') 

UNION DISTINCT 

(SELECT 't2' AS tn, navid, null as title, clicks AS cc, tags 
FROM t2 
WHERE DATE_ADD(d, INTERVAL '0 8' DAY_HOUR) <= NOW() 
AND tags LIKE '%cars%') 

UNION DISTINCT 

(SELECT 't3' AS tn, navid, title, clicks AS cc, tags 
FROM t3 
WHERE DATE_ADD(d, INTERVAL '0 8' DAY_HOUR) <= NOW() 
AND tags LIKE '%cars%') 
1

你必須有相同數量的工會,也列列名稱是基於第一個查詢的,所以你不需要命名在美利堅合衆國的每查詢列

(SELECT 't1' AS tn, navid, '' As title, clicks AS cc, tags 
FROM t1 
WHERE DATE_ADD(d, INTERVAL '0 8' DAY_HOUR) <= NOW() 
AND tags LIKE '%cars%') 

UNION DISTINCT 

(SELECT 't2', navid, '', clicks, tags 
FROM t2 
WHERE DATE_ADD(d, INTERVAL '0 8' DAY_HOUR) <= NOW() 
AND tags LIKE '%cars%') 

UNION DISTINCT 

(SELECT 't3', navid, title, clicks, tags 
FROM t3 
WHERE DATE_ADD(d, INTERVAL '0 8' DAY_HOUR) <= NOW() 
AND tags LIKE '%cars%')