2012-01-03 3 views
2

Я использую этот запрос, чтобы получить результаты из двух таблиц:Getteing больше значений с UNION ALL SQL Query

SELECT * FROM (
    SELECT parent_id as mID, count(*) as cnt 
     FROM wp_forum_posts 
     WHERE text LIKE '%{$word}%' 
     GROUP by 1 
     UNION ALL 
      SELECT id, count(*) 
      FROM wp_forum_threads 
      WHERE subject LIKE '%{$word}%' 
      GROUP by 1) x 
ORDER BY 2, 1 

Я хочу, чтобы выбрать еще несколько значений из wp_forum_threads. Значения, такие как subject. Как я могу это сделать? Просто добавление за id не работает. тогда запрос не возвращает результат.

+3

Ваши столбцы должны совпадать, но вы можете заменить пустую строку для отсутствующего столбца в этом SELECT. Вы все еще псевдоним с AS. – DOK

+2

Другими словами, количество столбцов в каждом SELECT, являющемся UNIONed, должно быть одинаковым. –

ответ

3

Число столбцов в выборке на обеих частях СОЮЗА ВСЕ должно быть одинаковым. Это означает, что если, например, вы хотите добавить «объект» на 2-й части запроса, вам нужно добавить «место держатель» в 1-й части запроса хорошо:

SELECT * FROM (
SELECT parent_id as mID, NULL, count(*) as cnt 
    FROM wp_forum_posts 
    WHERE text LIKE '%{$word}%' 
    GROUP by 1 
    UNION ALL 
     SELECT id, subject, count(*) 
     FROM wp_forum_threads 
     WHERE subject LIKE '%{$word}%' 
     GROUP by 1) x 
ORDER BY 2, 1 

это должно сработать.