Необходимо проверить по созданному типу универсального интерфейса.
необходимо будет сделать что-то вроде этого:
foo is IBar<String>
, потому что IBar<String>
представляет тот созданный тип. Причина необходимо сделать это, состоит в том, потому что, если T
не определено в проверке, компилятор не знает, имеете ли Вы в виду IBar<Int32>
или IBar<SomethingElse>
.
MySQL до версии 8.0 не поддерживает предложение WITH (CTE на языке SQL Server; факторинг подзапроса в Oracle), поэтому вам остается использовать:
Запрос на эту функцию датируется 2006 годом.
Как упоминалось, вы предоставили плохой пример - нет необходимости выполнять подвыбор, если вы никоим образом не изменяете вывод столбцов:
SELECT *
FROM ARTICLE t
JOIN USERINFO ui ON ui.user_userid = t.article_ownerid
JOIN CATEGORY c ON c.catid = t.article_categoryid
WHERE t.published_ind = 0
ORDER BY t.article_date DESC
LIMIT 1, 3
Вот лучший пример:
SELECT t.name,
t.num
FROM TABLE t
JOIN (SELECT c.id
COUNT(*) 'num'
FROM TABLE c
WHERE c.column = 'a'
GROUP BY c.id) ta ON ta.id = t.id
Эта функция называется общим табличным выражением http://msdn.microsoft.com/en-us/library/ms190766.aspx
Вы не сможете делать то же самое в mySQL, проще всего было бы, вероятно, создать представление, которое отражает что CTE и просто выберите из представления. Вы можете сделать это с помощью подзапросов, но это будет плохо работать. Если вы столкнетесь с какими-либо CTE, которые выполняют рекурсию, я не знаю, как вы сможете воссоздать это без использования хранимых процедур.
EDIT: Как я сказал в своем комментарии, в опубликованном вами примере нет необходимости в CTE, поэтому вы, должно быть, упростили его для вопроса, поскольку его можно просто записать как
SELECT article.*, userinfo.*, category.* FROM question
INNER JOIN userinfo ON userinfo.user_userid=article.article_ownerid
INNER JOIN category ON article.article_categoryid=category.catid
WHERE article.article_isdeleted = 0
ORDER BY article_date DESC Limit 1, 3
В Sql оператор with указывает временный именованный набор результатов, известный как общее табличное выражение (CTE). Его можно использовать для рекурсивных запросов, но в этом случае он указывается как подмножество. Если mysql допускает подзапросы, я бы попробовал
select t1.*
from (
SELECT article.*,
userinfo.*,
category.*
FROM question INNER JOIN
userinfo ON userinfo.user_userid=article.article_ownerid INNER JOIN category ON article.article_categoryid=category.catid
WHERE article.article_isdeleted = 0
) t1
ORDER BY t1.article_date DESC Limit 1, 3