2015-01-25 2 views
0

У меня есть две таблицы SQL: Activity и Notifications, а на стороне клиента у меня есть представление, которое отображает объединение обоих. Однако это представление должно быть разбито на страницы (средний пользователь, вероятно, имеет здесь 100 объектов) и отсортирован по столбцу createdAt, который имеет обе таблицы.SQL JOIN и ORDER две таблицы по одному столбцу

Как написать SQL-запрос для JOIN обеих таблиц по вертикали, сортировать по createdAt и, наконец, ограничить/смещать?

EDIT:

Схема:

Activity(id, createdAt, media, userId)

Notifications(id, createdAt, userId, text)

Ожидаемый результат (createdAt в порядке убывания):

id | createdAt | media | userId | text 
--------------------------------------- 
1 | ...  | t.jpg | 56  | null 
... 
10 | ...  | null | 45  | test 
+0

Можете ли вы поставить схему таблицы и ожидаемый результат? –

+1

Можете ли вы добавить, какой сервер БД вы используете, чтобы мы могли убедиться, что синтаксис верен. – jbg

+0

PostgreSQL, схема приближается – danielmhanover

ответ

2

глядя на ваш пример, кажется, что вы нужно объединить таблицы:

select id, createdAt, media, userId, Null as text from Activity 
union all 
select id, createdAt, Null as media, userId, text from Notifications 
order by createdAt 
limit 100 
+0

Ах да СОЮЗ. Это то, что я искал – danielmhanover

+0

Есть ли способ включить все поля в UNION без ввода вручную? – danielmhanover

+0

проблема в том, что для UNION для работы поля в обоих выборках должны совпадать по числу и типу. В вашем случае у вас есть несколько полей в одной таблице, которые не отображаются в другом, поэтому вам нужно включить Nulls. Первым выбором может быть выбран Activity. *, Null, но другой имеет Null между полями, поэтому вам нужно явно включить их все. – Jayvee

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