2016-02-08 5 views
2

У меня есть две таблицы, которые имеют почти одинаковые столбцы. Первая таблица содержит «текущее» состояние конкретной записи, а вторая таблица содержит все предыдущие статистические данные этих записей (это таблица истории). Вторая таблица имеет FK для первой таблицы.Query Two Tables - но не пытайтесь присоединиться?

Я хотел бы запросить обе таблицы, чтобы получить всю историю записей, включая ее текущее состояние, в одном результате. Я не думаю, что JOIN - это то, что я пытаюсь сделать, поскольку это «объединяет» несколько таблиц «по горизонтали» (один или несколько столбцов одной таблицы в сочетании с одним или несколькими столбцами другой таблицы для получения результата, который включает столбцы из обе таблицы). Скорее, я пытаюсь «присоединить» (???) таблицы «по вертикали» (что означает, что ни один столбец не добавляется к результату, а только то, что результаты из обеих таблиц попадают под одни и те же столбцы в наборе результатов) ,

Не совсем уверен, что то, что я выражаю, имеет смысл - или если это возможно в MySQL.

+1

Редактировать свой вопрос и предоставить образцы данных и желаемые результаты. Вы передаете общее представление о том, чего хотите, но недостаточно подробностей для тех, кто действительно поможет вам. –

+0

@Gordon Linoff: Для меня очень ясно, что StackOverflowNewbiew хочет сделать. Его вопрос очень ясен и не нуждается в дальнейших объяснениях. – user1027167

ответ

2

Для достижения этой цели, вы можете использовать UNION между двумя сообщениями SELECT. Я также предложил бы выбрать из таблицы следующим образом, чтобы вы могли сортировать по столбцам в своем результирующем наборе. Предположим, мы хотим объединить результаты следующих двух запросов:

SELECT FieldA, FieldB FROM table1; 
SELECT FieldX, FieldY FROM table2; 

Мы могли бы присоединиться к этим с UNION заявление следующим образом:

SELECT Field1, Field2 FROM (
    SELECT FieldA AS `Field1`, FieldB AS `Field2` FROM table1 
    UNION SELECT FieldX AS `Field1`, FieldY AS `Field2` FROM table2) 
AS `derived_table` 
ORDER BY Field1 ASC, Field2 DESC 

В этом примере я выбрал из table1 и table2 полей, аналогичны, но не идентично названы, используя один и тот же тип данных. Они совпадали с использованием псевдонимов (например, , FieldA в table1 и FieldX в table2 как карта для Field1 в наборе результатов, и т.д.).

Если каждая таблица имеет одинаковые имена столбцов, полевое сглаживание не требуется, и запрос становится проще.


Примечание: в MySQL необходимо называть производные таблицы, даже если указанное имя не предназначено для использования.

-1

Ваш после левого соединения на первом столе. Это сделает правую сторону я бы ситемы их число (существует в обоих) или нуль (существует только в левой таблице)

Вы хотите

select lhs.* , rhs.id from lhs left join rhs using(Id)