2015-10-17 2 views
-2

Я новичок в SQL, поэтому я не слишком уверен, как это сделать с этим запросом ... У меня есть несколько таблиц, все из которых имеют 2 столбца, которые я хочу принять (date_added и path).msql query FROM другой запрос msl

Так что я сделал Union select ("date_added" and "path") для каждой таблицы. Так что теперь у меня есть таблица со всеми строками из всех таблиц, которые я хочу:

SELECT `date_added`, `path` FROM `art_1` UNION SELECT `date_added`, `path` FROM `art_5484` 

Это прекрасно работает, но теперь мне нужно, чтобы получить строку с наименьшим датой (я использую мин функцию). Поэтому я хочу, чтобы сделать выбор на столе, который я получил от моего последнего запроса так что я:

SELECT `path` 
FROM cross_join = (SELECT `date_added`, `path` FROM `art_1` UNION SELECT `date_added`, `path` FROM `art_5484`) 
WHERE `date_added` = MIN(`date_added`) 

Но это не работает; Я предполагаю, что это синтаксическая ошибка, но я не вижу, где ...
если кто-нибудь может мне помочь, это было бы здорово!

+0

Когда вы говорите «он не работает», он возвращает нежелательный результат или ошибку? – Reisclef

+0

Что такое «кросс-соединение»? –

+0

@ Reisclef возвращает ошибку, синтаксическую ошибку, но я не вижу, где ... – Jackymamouth

ответ

1

Один из способов, чтобы получить минимальную дату, чтобы использовать order by и limit:

SELECT `path` 
FROM (SELECT `date_added`, `path` FROM `art_1` UNION ALL 
     SELECT `date_added`, `path` FROM `art_5484` 
    ) a 
ORDER BY date_added DESC 
LIMIT 1; 

Примечание: это возвращает только одно значение, даже если при наличии дубликатов. Кроме того, я изменил UNION на UNION ALL. Вы должны использовать UNION ALL по умолчанию, потому что UNION несет накладные расходы на удаление дубликатов.

+0

Это прекрасно, спасибо большое! Можно ли получить второй самый последний 'date_added' с этим порядком по методу? – Jackymamouth

+0

нашел, как получить n самых последних 'date_added': просто добавьте' OFFSET n; 'в конец вашего кода. еще раз спасибо – Jackymamouth