2015-01-08 4 views
1

Вот жесткий файл cookie. У меня есть две несвязанные таблицы - овощи и фрукты. Интересно, если это возможно, чтобы сделать все следующие шаги в один MySQL запросов:Как объединить несвязанные таблицы с временным столбцом

1) SELECTID и имя из обеих таблиц.

2) Добавить временное значение столбца - tmp_type - каждой строке, найденной в (1). Тип овощей = 1, фрукты = 2.

3) Совокупные результаты из обеих таблиц и ORDER BYимя.

Так, что-то вроде этого:

enter image description here

Любые идеи? Я действительно хотел бы сделать это на уровне базы данных вместо того, чтобы манипулировать двумя результатами таблицы в PHP-контроллере, но я не уверен, что лучший способ достичь цели.

+1

Посмотрите на «союз» с вашими ** точными ** определениями, которые вы использовали .. Он будет делать то, что вы хотите. –

ответ

2

Union запрос:

SELECT * FROM (
    SELECT id, name, 2 AS tmp_type 
    FROM fruit 

    UNION ALL 

    SELECT id, name, 1 AS tmp_type 
    FROM vegetable 
) AS foo 
ORDER BY name 

Примечание Я использую подзапрос для заказа. Вы можете сделать заказ непосредственно внутри профсоюза, но синтаксис немного неуловим - поиск того, что должно быть простым примером: http://dev.mysql.com/doc/refman/5.0/en/union.html

+0

Привет, очень милый, такс. Не знаете, в чем заключается цель части AS. Я понимаю, что это optonal, и 'ORDER BY' может идти прямо после закрывающей скобки, не так ли? – lesssugar

+0

EDIT: ** «Каждая производная таблица должна иметь свой собственный псевдоним» ** Итак, догадаться, что ей нужно 'AS foo' в конце концов :) – lesssugar

2

В качестве примечания: подзапрос не требуется. Это должно также работать:

SELECT id, name, 2 AS tmp_type 
FROM fruit 
UNION ALL 
SELECT id, name, 1 AS tmp_type 
FROM vegetable 
ORDER BY name; 
+0

Да, также работает, приятно. – lesssugar

+0

Это также будет более эффективным (по крайней мере, в MySQL версии 5.5 и более ранних), поскольку оно позволяет избежать (ненужного) процесса материализации производной таблицы. – spencer7593

Смежные вопросы