0

查询 3 个表,最后一个表有额外的行要查找。
试过这个:

(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%' ) 

我想title在 t3中获得
任何帮助,谢谢

4

3 回答 3

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%' ) 
于 2012-05-14T01:57:10.243 回答
1

通过UNION组合的 SQL应该具有相同数量和类型的列。

这是因为您只有一个查询结果,即使它看起来像多个小查询。

所以你必须有一些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%' ) 
于 2012-05-14T01:59:00.660 回答
1

UNION 的列数必须相同,列名也基于第一个查询,因此您不需要为 UNION 中的每个查询命名列

(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%' )
于 2012-05-14T01:59:00.693 回答