Как Вы используете “С” пунктом в MySQL?

Необходимо проверить по созданному типу универсального интерфейса.

необходимо будет сделать что-то вроде этого:

foo is IBar<String>

, потому что IBar<String> представляет тот созданный тип. Причина необходимо сделать это, состоит в том, потому что, если T не определено в проверке, компилятор не знает, имеете ли Вы в виду IBar<Int32> или IBar<SomethingElse>.

100
задан Marc Alff 26 September 2016 в 08:24
поделиться

3 ответа

MySQL до версии 8.0 не поддерживает предложение WITH (CTE на языке SQL Server; факторинг подзапроса в Oracle), поэтому вам остается использовать:

  • ВРЕМЕННЫЕ таблицы
  • ПРОИЗВОДНЫЕ таблицы
  • встроенные представления (фактически то, что представляет предложение WITH - они взаимозаменяемы)

Запрос на эту функцию датируется 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
122
ответ дан 24 November 2019 в 04:52
поделиться

Эта функция называется общим табличным выражением 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
2
ответ дан 24 November 2019 в 04:52
поделиться

В 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
19
ответ дан 24 November 2019 в 04:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: