2016-12-06 6 views
1

У меня есть эта таблицаORDER BY SQL на многих таблицах

Table1 
id | name | 
    1 | a | 
    2 | c | 

и другие таблицы, как этот

Table2 
id | name | 
    1 | b | 
    2 | d | 

Как я могу сортировать это две таблицы, чтобы привести

ABCD

DONE READING THIS но это только дает мне этот результат

ACBD

, когда я пытаюсь это

SELECT * FROM Table1 AS t1 JOIN Table2 AS t2 ON t2.id = t1.id 
ORDER BY t1.name ASC, t2.name ASC; 
+0

что правильная логика порядка .Вы можете заказать по идентификатору также и дают ту же result.also Сортировать по ИНТ колонке всегда хорошо. – KumarHarsh

+0

@KumarHarsh Я хочу «заказать все» из таблицы1 и таблицы2, имя столбца –

+0

@KumarHarsh, почему у них нет хорошей логики для заказа по имени? –

ответ

5

Вы можете попробовать принимать UNION из двух таблиц вместо:

SELECT id, name 
FROM Table1 
UNION ALL 
SELECT id, name 
FROM Table2 
ORDER BY name 

Если вы хотите сохранить информацию об исходной кислоте в.п. каждой записи, вы можете добавить столбец для этого:

SELECT id, name, 't1' AS source 
FROM Table1 
UNION ALL 
SELECT id, name, 't2' 
FROM Table2 
ORDER BY name 

Update:

Если Codeigniter не поддерживает UNION из коробки, вы всегда можете поставить выше запрос в строку и выполнить его изначально:

$sql = "SELECT id, name FROM Table1 UNION ALL SELECT id, name FROM Table2 ORDER BY name"; 
$this->db->query($sql); 
+0

, поэтому я должен сделать его UNION вместо JOIN? –

+0

UNION, кажется, имеет для меня больше всего смысла. Возможно, посмотрите на вариант соединения by @jelliaes. –

+0

но я не понимаю, откуда появился '# TEMP_TBL' –

1
SELECT * 
INTO #TEMP_TBL 
FROM Table1 AS t1 
JOIN Table2 AS t2 
ON t2.id = t1.id 

SELECT * 
FROM #TEMP_TBL 
ORDER BY ID, NAME 

DROP TABLE #TEMP_TBL 
+0

Можете ли вы объяснить мне, откуда появился этот #TEMP_TBL? –

+0

@PureRhymerOrganization #TEMP_TBL - временная таблица, в которую я вставил комбинированные значения из table1 и table2. Запрос совместим с SQL SERVER. Btw, если две таблицы имеют одинаковое значение, почему бы просто не использовать для них одну таблицу? – jelliaes

+0

На самом деле у него есть другие данные, поэтому я тоже не присоединился к ним. Так что, если это не SQL SERVER, это тоже совместимо? –

1

Если вы хотите использовать присоединиться попробуйте ниже запрос

select * from (select x.* from table1 as x left join table2 as y on x.id = y.id) as z order by z.name; 
+0

, поэтому он будет сливать две таблицы вправо? –

+0

да, поэтому он будет сравнивать данные по id, записи слияния и возвращению результата –

+0

oh я вижу, но было так сложно преобразовать его в codeigniter –

1

Мы можем использовать это также:

SELECT * FROM (
    SELECT id, NAME FROM Table1 
    UNION ALL 
    SELECT id, NAME FROM Table2) t ORDER BY name 
+1

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

+0

Да, в случае огромных данных, но это также должно быть известно, поэтому я опубликовал его как альтернативу. – Susang